【1013】Battle Over Cities (25 分)

简介: 【1013】Battle Over Cities (25 分)【1013】Battle Over Cities (25 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
using namespace std;  
//将问题转化为求连通块数,!!vis[]!!
const int N=1111;
vector<int> G[N]; //邻接表
bool vis[N]; //标记顶点i是否已被访问
int currentPoint;  //当前需要删除的顶点编号
//dfs(v)遍历顶点v所在的连通块
void dfs(int v){
  if(v==currentPoint)  return; //当遍历到已删除顶点v时,返回
  vis[v]=true;  //标记顶点v已被访问
  for(int i=0;i<G[v].size();i++){  //遍历v的所有邻接点
    if(vis[G[v][i] ]== false) { //如果顶点G[v][i]未被访问
      dfs(G[v][i]); //访问顶点G[v][i]
    }
  }
}
int n,m,k;
int main(){   
  scanf("%d%d%d",&n,&m,&k); //输入顶点数、边数及查询数
  for(int i=0;i<m;i++){
    int a,b;
    scanf("%d%d",&a,&b); //输入边的两个顶点
    G[a].push_back(b);  //边a->b
    G[b].push_back(a);  //边b->a
  }
  for(int query=0 ;query<k ;query++){  //k次查询
    scanf("%d",&currentPoint);  //欲删除的顶点编号
    memset(vis,false,sizeof(vis)); //初始化vis数组为false
    int block=0;  //连通块个数,初值为0
    for(int i=1;i<=n;i++){ //枚举每一个顶点
      if(i !=currentPoint && vis[i] == false) { //如果未被删除且未被访问
        dfs(i); //遍历顶点i所在的连通块
        block++; //连通块个数加1
      }
    }
    printf("%d\n",block-1); //输出连通块个数减1,表示需要增加的边
  }
  system("pause"); 
    return 0;   
}
相关文章
【PTA】7-8 到底有多二 (15分)
【PTA】7-8 到底有多二 (15分)
2220 0
2022天梯赛三月冲刺——PAT (Advanced Level)1013 Battle Over Cities (并查集找连通块)
2022天梯赛三月冲刺——PAT (Advanced Level)1013 Battle Over Cities (并查集找连通块)
112 0
PTA 7-4 胖达与盆盆奶 (20 分)
俗称“胖达”,会排队吃盆盆奶。它们能和谐吃奶的前提,是它们认为盆盆奶的分配是“公平”的,即:更胖的胖达能吃到更多的奶,等胖的胖达得吃到一样多的奶。
183 0
|
测试技术
PTA 1039 到底买不买 (20 分)
小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。
119 0
L1-057 PTA使我精神焕发 (5 分)
L1-057 PTA使我精神焕发 (5 分)
94 0
L1-057 PTA使我精神焕发 (5 分)
|
机器学习/深度学习 人工智能
PTA 7-3 拼题 A 是真爱 (20 分)
如果一个人在一段话里很多次提到 pintia,那对拼题 A 就是真爱啦~ 本题就请你检查一下给定的文字中出现了几次 pintia。
154 0
PTA 7-1 多二了一点 (15 分)
若一个正整数有 2n 个数位,后 n 个数位组成的数恰好比前 n 个数位组成的数多 2,则称这个数字“多二了一点”。
126 0
PTA 1088 三人行 (20 分)
子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”
88 0
|
测试技术
PTA 1011 A+B 和 C (15 分)
给定区间 [−2 31 ,2 31 ] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。
117 0
PTA 1046 划拳 (15 分)
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。
107 0