zoukankan      html  css  js  c++  java
  • 【PAT甲级】1013 Battle Over Cities (25 分)(并查集,简单联通图)

    题意:

    输入三个整数N,M,K(N<=1000,第四个数据1e5<=M<=1e6)。有1~N个城市,M条高速公路,K次询问,每次询问输入一个被敌军占领的城市,所有和该城市相连的高速公路全部不能使用,求增加多少条高速公路可以使剩下N-1个城市联通。(原本城市之间可能不联通,假设原本联通只能通过第0,4个数据)。

    trick:

    同一份代码交很多次,有几次会第4个点超时。(存疑)建议采用g++而不是clang++

    AAAAAccepted code:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[1000007],b[1000007];
     4 int fa[1007];
     5 int find_(int x){
     6     if(fa[x]==x)
     7         return x;
     8     else
     9         return fa[x]=find_(fa[x]);
    10 }
    11 int main(){
    12     int n,m,k;
    13     cin>>n>>m>>k;
    14     for(int i=1;i<=m;++i)
    15         cin>>a[i]>>b[i];
    16     for(int i=1;i<=k;++i){
    17         int x;
    18         cin>>x;
    19         for(int j=1;j<=n;++j)
    20             fa[j]=j;
    21         for(int j=1;j<=m;++j){
    22             if(a[j]==x||b[j]==x)
    23                 continue;
    24             int t=find_(a[j]);
    25             int tt=find_(b[j]);
    26             if(t!=tt)
    27                 fa[t]=tt;
    28         }
    29         int cnt=-1;
    30         for(int j=1;j<=n;++j){
    31             if(j==x)
    32                 continue;
    33             if(fa[j]==j)
    34                 cnt++;
    35         }
    36         cout<<cnt<<"
    ";
    37     }
    38     return 0;
    39 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    Spinal Tap Case
    Sorted Union
    Search and Replace
    Boo who
    Missing letters
    DNA Pairing
    Pig Latin
    Where art thou
    Roman Numeral Converter
    Redis高级客户端Lettuce详解
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11243535.html
Copyright © 2011-2022 走看看