PAT 1013. Battle Over Cities (25)

来源:互联网 发布:淘宝服装质检报告 编辑:程序博客网 时间:2024/06/05 15:51

考察并查集

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int tree[1001];bool temp[1001][1001];struct node{    int a;    int b;}Edge[500002];int find(int x){    if(tree[x] == -1) return x;    else        return tree[x] = find(tree[x]);}int main(){    int n,m,k;    while(scanf("%d%d%d",&n,&m,&k) != EOF)    {        for(int i = 0; i < m; i++)            scanf("%d%d",&Edge[i].a,&Edge[i].b);        for(int i = 0; i < k; i++)        {            int c;            scanf("%d",&c);            memset(temp,false,sizeof(temp));            memset(tree,-1,sizeof(tree));            for(int i = 0; i < m; i++)            {                if(Edge[i].a != c && Edge[i].b != c)                {                    int aa = Edge[i].a;                    int bb = Edge[i].b;                    int fa = find(aa);                    int fb = find(bb);                    if(fa != fb)                        tree[fa] = fb;                }            }            int cnt = 0;            for(int i = 1; i <= n; i++)                if(i != c && tree[i] == -1)                    cnt++;            printf("%d\n",cnt-1);        }    }    return 0;}
0 0
原创粉丝点击