神为城市们修建了 m 条双向高速公路。
建成之后,为了了解现在城市的交通情况,神会随机选择一个城市,问你与这个城市直接连接的城市的编号。
一些城市间的交通压力很大,所以可能神会在两个城市间修建多条高速公路。
我居然是第一个AC的!!!
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=2428
神为城市们修建了 m 条双向高速公路。
建成之后,为了了解现在城市的交通情况,神会随机选择一个城市,问你与这个城市直接连接的城市的编号。
一些城市间的交通压力很大,所以可能神会在两个城市间修建多条高速公路。
第一行一个正整数 m,表示修建的所有高速公路。
接下来 m 行,每行两个正整数数 u,v,表示神在编号为 u 的城市和编号为 v 的城市间修建了一条双向高速公路。
第三行一个正整数 k,表示神询问的城市编号。
一行 w 个整数,表示所有与城市 k 有高速公路直接相连的城市编号,从小到大输出。
如果 k=i,在同一个城市内当然有啦!
5
1 2
2 3
3 4
2 4
2 3
3
2 3 4
样例解释
3 号城市与 2 号,4 号城市间有高速公路。
数据范围
令 n 为城市编号的最大值。
1≤n≤3000,1≤m≤5*10^4。
作者分析:这题是一个双向图论算法,结合桶排序输出答案,使用road结构体创建边,详细见代码。
#include <bits/stdc++.h> using namespace std; struct road{ int u,v; }; int main(){ int m,k; cin >> m; road a[m+1]; int ans[3001]; memset(ans,0,sizeof(ans)); for (int i = 1;i <= m;i++){ cin >> a[i].u >> a[i].v; } cin >> k; for (int i = 1;i <= m;i++){ if (a[i].u == k){ ans[a[i].v] = 1; } if (a[i].v == k){ ans[a[i].u] = 1; } } ans[k] = 1; for (int i = 0;i < 3001;i++){ if (ans[i] == 1){ cout << i << " "; } } return 0; }
原文:https://www.cnblogs.com/linyiweiblog/p/14490191.html