TLE第一点求调:
#include<bits/stdc++.h>
using namespace std;
struct fuck
{
int next;
int to;
int money;
};
int head[2000001];
int cnt=1;
fuck a[8000001];
void add(int x,int y,int s);
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,m;
int flag;
cin>>n>>m>>flag;
if(flag)
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
}else
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
for(int i=1;i<=n;i++)
{
//if(head[i]==0)
/*cout<<endl;else*/
for(int k=head[i];k;k=a[k].next)
{
cout<<i<<' '<<a[k].to<<' '<<a[k].money<<endl;
}
}
return 0;
}
void add(int x,int y,int s)
{
a[cnt].money=s;
a[cnt].to=y;
a[cnt].next=head[x];
head[x]=cnt++;
}
链式前向星模板题,读入n个点,m条边,以及flag,若flag==1则图有向,否则无向。对每个点输出它的每一条边。
第一行三个数n,m,flag,题意如上所示 第2~1+m行,每行三个数,x,y,z,代表从x到y有一条长为z的边
若flag=1则m行,flag=0则m*2行,每行三个数,即该点的编号、所指向点的编号,边的长度,先按第一个数升序排列,再以链式前向星中的顺序输出即可。 (其实就是i从1到n,再按顺序查找边输出即可) 特殊的,若该点无出边,单独一个空行
5 5 0
1 2 5
1 4 6
2 3 7
3 5 3
3 4 1
1 4 6
1 2 5
2 3 7
2 1 5
3 4 1
3 5 3
3 2 7
4 3 1
4 1 6
5 3 3