首页 > 编程语言 > 详细

C++9018:2428——神与交通

时间:2021-03-06 13:01:21      阅读:26      评论:0      收藏:0      [点我收藏+]

我居然是第一个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;
}

 

C++9018:2428——神与交通

原文:https://www.cnblogs.com/linyiweiblog/p/14490191.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!