标签:
有n个城市,编号为1到n,这些城市当中有m条有向边,现在Kong_Ruo在1号城市,他准备去旅游。如果Kong_Ruo能从城市1到达城市i,并能从城市i回到城市1,那么Kong_Ruo就能去城市i游览。现在请你从小到大输出所有能去游览的城市编号。
输入
第一行:两个整数n,m,分别表示城市个数与有向边个数。
后m行:每行两个整数a和b,表示a城市到b城市有一条有向边。
输出
输出所有符合要求的城市编号,每个一行,从小到大输出。
输入示例
5 4
3 1
2 3
4 3
1 2
输出示例
1
2
3
#include<iostream> using namespace std; const int maxn=100010; int first[maxn],next[maxn],u[maxn],v[maxn],e; int refirst[maxn],renext[maxn],reu[maxn],rev[maxn],ree; int vis[maxn],revis[maxn],q[maxn],req[maxn]; void bfs(int x) { int front=0,rear=0; vis[x]=1; q[rear++]=x; while(front<rear) { x=q[front++]; for(int i=first[x];i;i=next[i]) { if(!vis[v[i]]) { vis[v[i]]=1; q[rear++]=v[i]; } } } } void rebfs(int x) { int front=0,rear=0; revis[x]=1; req[rear++]=x; while(front<rear) { x=req[front++]; for(int i=refirst[x];i;i=renext[i]) { if(!revis[rev[i]]) { revis[rev[i]]=1; req[rear++]=rev[i]; } } } } void AddEdge(int a,int b) { u[++e]=a; v[e]=b; reu[e]=b; rev[e]=a; next[e]=first[a]; renext[e]=refirst[b]; first[a]=e; refirst[b]=e; } int main() { int n,m,a,b,ans=0; scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); AddEdge(a,b); } bfs(1); rebfs(1); for(int i=1;i<=n;i++) if(vis[i] && revis[i]) printf("%d\n",i); //system("pause"); }
试题描述
|
有n个城市,编号为1 ~ n,这些城市当中有一些有向边,现在Kong_Ruo从1号城市出发,请问他最多能到达多少城市呢?(一号城市也算) |
输入
|
第一行:两个整数n,m,分别表示城市个数与有向边个数。
后m行:每行两个整数a和b,表示a城市到b城市有一条有向边。 |
输出
|
一个整数,表示Kong_Ruo最多能到达的城市数量。
|
输入示例
|
5 4
1 2 1 3 3 4 4 1 |
输出示例
|
4
|
其他说明
|
1<=n,m<=100000
|
#include<iostream>//邻接表 using namespace std; const int maxn=100010; int first[maxn],next[maxn],u[maxn],v[maxn],e; int vis[maxn]; int q[maxn]; void bfs(int x) { int front=0,rear=0; vis[x]=1; q[rear++]=x; while(front<rear) { x=q[front++]; for(int i=first[x];i;i=next[i]) { if(!vis[v[i]]) { vis[v[i]]=1; q[rear++]=v[i]; } } } } void AddEdge(int a,int b) { u[++e]=a; //储存有向边的信息 v[e]=b; next[e]=first[a]; first[a]=e; } int main() { int n,m,a,b,ans=0; scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); AddEdge(a,b); } bfs(1); for(int i=1;i<=n;i++) if(vis[i]) ans++; printf("%d",ans); return 0; }
标签:
原文地址:http://www.cnblogs.com/Kong-Ruo/p/4501248.html