关闭

PAT 1013 Battle Over Cities(并查集)

标签: PAT1013Battle Over Cities并查集
345人阅读 评论(0) 收藏 举报
分类:

1013. Battle Over Cities (25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately if we need to repair any other highways to keep the rest of the cities connected. Given the map of cities which have all the remaining highways marked, you are supposed to tell the number of highways need to be repaired, quickly.

For example, if we have 3 cities and 2 highways connecting city1-city2 and city1-city3. Then if city1 is occupied by the enemy, we must have 1 highway repaired, that is the highway city2-city3.

Input

Each input file contains one test case. Each case starts with a line containing 3 numbers N (<1000), M and K, which are the total number of cities, the number of remaining highways, and the number of cities to be checked, respectively. Then M lines follow, each describes a highway by 2 integers, which are the numbers of the cities the highway connects. The cities are numbered from 1 to N. Finally there is a line containing K numbers, which represent the cities we concern.

Output

For each of the K cities, output in a line the number of highways need to be repaired if that city is lost.

Sample Input
3 2 3
1 2
1 3
1 2 3
Sample Output
1
0
0

简单的并查集应用:

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <strstream>
#include <map>

using namespace std;
struct Node
{
    int x;
    int y;
}edge[1005*1005];
int father[10005];
int find(int x)
{
    if(father[x]!=x) father[x]=find(father[x]);
    return father[x];
}
int n,m,k;
int a;
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=m;i++)
        scanf("%d%d",&edge[i].x,&edge[i].y);

    for(int i=1;i<=k;i++)
    {
        scanf("%d",&a);
        for(int j=1;j<=n;j++)
            father[j]=j;
        for(int j=1;j<=m;j++)
        {
            if(edge[j].x==a||edge[j].y==a)
                continue;
            int fx=find(edge[j].x);
            int fy=find(edge[j].y);
            if(fx!=fy)
                father[fx]=fy;
        }
        int ans=0;
        for(int j=1;j<=n;j++)
        {
            if(j==a) continue;
            find(j);
            if(father[j]==j)
                ans++;
        }
        printf("%d\n",ans-1);
    }
    return 0;

}



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

浙大PAT考试1013~1016(最伤的一次。。)

我能说我1016WA了几天都不得最后还是拿别人代码交的么。。。 真心找不到那个神数据。。。 自己把整个程序的流程都画出来了,仔细推敲是木有问题的啊。。。 题目地址:http://pat.zju...
  • opm777
  • opm777
  • 2014-06-29 23:40
  • 2036

gplt L2-010. 排座位(普通并查集)

https://www.patest.cn/contests/gplt/L2-010 题意:中文题。 思路:刚开始一看两者之间关系有多种,还以为是带权并查集,后来想想天梯赛不都是裸题么...
  • Flynn_curry
  • Flynn_curry
  • 2017-03-13 22:00
  • 174

PAT--朋友圈--并查集

某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友...
  • whd526
  • whd526
  • 2016-02-22 20:02
  • 729

PAT 朋友圈(并查集)

某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友...
  • qq_27601815
  • qq_27601815
  • 2016-05-16 20:31
  • 790

L2-010. 排座位——>并查集

L2- 010. 排座位 点击打开链接 时间限制 150 ms 内存限制  65536 kB 代码长度限制 8000 B 判题程序 ...
  • curson_
  • curson_
  • 2016-07-14 18:02
  • 178

九度OJ 1325:Battle Over Cities(城市间的战争) (并查集)

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:376 解决:132 题目描述: It is vitally important to hav...
  • thudaliangrx
  • thudaliangrx
  • 2015-11-14 21:12
  • 257

1013. Battle Over Cities (25) 连通子集 连通分量的数量

这道题题意是说给出一张图的点和边,无向图。 去掉一个点 问如果要使剩余的点连通 ,最少需要再连通几条边。 实质就是求连通子集的数量,然后连通子集的数量-1即为结果。 这里可以用三种放法 bfs ...
  • li_jie0919
  • li_jie0919
  • 2015-09-30 16:04
  • 121

并查集-- PAT - L1-020(并查集应用)

转载自http://blog.csdn.net/qq_28300479/article/details/51586819 L1-020. 帅到没朋友 时间限制 200 ms ...
  • Acmer_Sly
  • Acmer_Sly
  • 2017-03-23 17:52
  • 189

hdu3371Connect the Cities(并查集,最小生成树)

1.题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3371   2.思路:        给出n个点,m条边,以及k组已经修好的路,问联通所有城市要需...
  • u010102829
  • u010102829
  • 2013-08-20 09:18
  • 493

并查集的实现

上一篇实现kruskal算法用到了并查集,并大概自说自话地讲了并查集的原理。即只关心是否属于一个集合这个属性,不关心元素之间的关系(并查集看着有根树,肯定是连通且无环的),即不关心它们是怎么连接的。 ...
  • architect19
  • architect19
  • 2013-05-14 14:33
  • 2609
    个人资料
    • 访问:120993次
    • 积分:4559
    • 等级:
    • 排名:第7505名
    • 原创:349篇
    • 转载:0篇
    • 译文:0篇
    • 评论:7条
    最新评论