//1013. Battle Over Cities (25)
//这道题主要思路是,删除了某个城市节点后,剩下的城市可以分作几部分(假设N部分),则需要组成的路线是N-1就可以将所有城市相连。
//采用dfs将所有顶点遍历,判断可以分为的组即可。
//acc
#include<iostream>
using namespace std;
bool Road[1005][1005] = {false};
bool IsReached[1005] = {false};
int N, M, K;
int t;
//int flag = true;
void dfs( int curr)
{
int i;
for(i = 1;i<=N;i++)
{
if(IsReached[i] == false && i != curr && Road[i][curr] == true && i!= t)
{
IsReached[i] = true;
dfs(i);
}
}
}
int main()
{
cin >> N >> M >> K;
int t1, t2;
int i;
for(i=0;i<M;i++)
{
cin >> t1 >> t2;
Road[t1][t2] = true;
Road[t2][t1] = true;
}
int count = 0;
int j;
for(i=0;i<K;i++)
{
cin >> t;
count = 0;
fill(IsReached, IsReached+ 1005, false);
for( j= 1 ;j<=N;j++)
{
//dfs(i);
if(j == t)
continue;
if( IsReached[j] == false)
{
dfs(j);
count++;
}
}
if(count <= 1)
cout << "0" << endl;
else
cout << count-1 << endl;
}
return 0;
}
PAT 1013. Battle Over Cities (25)
最新推荐文章于 2022-01-29 13:29:31 发布