输入格式
第一行三个数 �,�,����n,m,flag,题意如上所示 第 22 ~ 1+�1+m 行,每行三个数,�,�,�x,y,z,代表从 �x 到 �y 有一条长为 �z 的边
输出格式
若 ����=1flag=1则 �m 行,����=0flag=0 则 �∗2m∗2 行,每行三个数,即该点的编号、所指向点的编号,边的长度,先按第一个数升序排列,再以链式前向星中的顺序输出即可。 (其实就是 �i 从 11 到 �n,再按顺序查找边输出即可) 特殊的,若该点无出边,单独一个空行
输入样例1
5 5 01 2 51 4 62 3 73 5 33 4 1
输出样例1
1 4 61 2 52 3 72 1 53 4 13 5 33 2 74 3 14 1 65 3 3
输入样例2
4 3 1
1 3 6
3 4 1
2 1 3
输出样例2
1 3 62 1 33 4 1
提示
对于 100%100% 的数据,�≤2×106,�≤4×106,�≤109n≤2×106,m≤4×106,l≤109,保证图连通。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
vector< pair<int,int> > g[N];
void add(int u,int v,int a){
g[u].push_back(make_pair(v,a));
}
int n,m,x,y,z;
bool flag;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m>>flag;
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
add(x,y,z);
if(!flag)add(y,x,z);
}
for(int u=1;u<=n;u++){
if(g[u].size()==0) cout<<"\n";
else {
for(int i=int(g[u].size())-1;i>=0;i--){
cout<<u<<" "<<g[u][i].first<<" "<<g[u][i].second<<"\n";
}
}
}
return 0;
}
1万+

被折叠的 条评论
为什么被折叠?



