题目描述:
对于一个图,最重要的就是要知道这个图是一个怎样的图。所以我们需要知道与每个点相邻的点有哪些。给出一个无向图,输出每个点相邻的那些点。
输入格式:
共M+1行。
第1行包含2个正整数N,M,表示有N个点,M条边。
第2~M+1行包含2个用空格隔开的正整数u,v,表示一条从u到v的无向路径。注意,可能会有重边和自环,一个点不与自己相邻。
输出格式:
共N行,由小到大输出每个点相邻的点,如果这个点是孤立的,则输出一个空行。
样例1输入:
5 6
1 2
1 3
3 4
4 3
4 5
5 1
样例1输出:
2 3 5
1
1 4
3 5
1 4
约定:
n,m≤200000
水题啊
#include<bits/stdc++.h>
using namespace std;
const int N=200005;
vector<int>g[N];
vector<int>vc;
bool vis[N];
int n,m;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1,x,y;i<=m;++i)
{
scanf("%d%d",&x,&y);
if(x==y)continue;
g[x].push_back(y);
g[y].push_back(x);
}
for(int i=1;i<=n;++i)sort(g[i].begin(),g[i].end());
for(int i=1;i<=n;++i)
{
for(int j=0;j<g[i].size();++j)
{
int v=g[i][j];
if(vis[v])continue;
printf("%d ",v);
vis[v]=true;
vc.push_back(v);
}
for(int j=0;j<vc.size();++j)
vis[vc[j]]=false;
vc.clear();
puts("");
}
return 0;
}