Battle Over Cities (25)(DFS、连通图)
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
主要思想:一张连通图,去掉一个节点后,想把个个节点连通起来,至少需要添加的边的数目n。n = 该连通图,去掉一个节点后,所形成的 极大连通子图的个数 - 1.
所以 只要把去掉的点定义为检测点,DFS不要去遍历它,计算出极大连通子图的个数便可,算法如下:
void DFS(int x,int N) //N为检测点
{
visit[x]=;
for(int i=;i<Ladj[x].size();i++)
{
if(visit[Ladj[x][i]]==&&Ladj[x][i]!=N)//不等于被检测的点
DFS(Ladj[x][i],N);
}
}
int count =;
for(j=;j<=n;j++)
{
if(visit[j]==&&j!=check[i])//不等于被检测的点,check数组保存检测点
{
count++;//极大连通子图的个数
DFS(j,check[i]);
}
}
cout<<count-<<endl;
AC代码:
#include <iostream>
#include <vector>
using namespace std;
vector<int> Ladj[];
int check[];//存放要检测的点
int visit[];
void DFS(int x,int N)
{
visit[x]=;
for(int i=;i<Ladj[x].size();i++)
{
if(visit[Ladj[x][i]]==&&Ladj[x][i]!=N)//不等于被检测的点
DFS(Ladj[x][i],N);
}
}
int main()
{
int n,m,k,i,j;
while(cin>>n)
{
cin>>m>>k;
for(i=;i<m;i++)
{
int a,b;
cin>>a>>b;
Ladj[a].push_back(b);
Ladj[b].push_back(a);
}
for(i=;i<k;i++)
{
cin>>check[i];
}
for(i=;i<k;i++)
{
int count=;
for(j=;j<=n;j++)//初始化
{
visit[j]=;
}
for(j=;j<=n;j++)
{
if(visit[j]==&&j!=check[i])//不等于被检测的点
{
count++;
DFS(j,check[i]);
}
}
cout<<count-<<endl;
}
}
return ;
}
Battle Over Cities (25)(DFS、连通图)的更多相关文章
- 1013 Battle Over Cities (25分) DFS | 并查集
1013 Battle Over Cities (25分) It is vitally important to have all the cities connected by highways ...
- PAT 解题报告 1013. Battle Over Cities (25)
1013. Battle Over Cities (25) t is vitally important to have all the cities connected by highways in ...
- PAT 甲级 1013 Battle Over Cities (25 分)(图的遍历,统计强连通分量个数,bfs,一遍就ac啦)
1013 Battle Over Cities (25 分) It is vitally important to have all the cities connected by highway ...
- pat1013. Battle Over Cities (25)
1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...
- 1013. Battle Over Cities (25)(DFS遍历)
For example, if we have 3 cities and 2 highways connecting city1-city2 and city1-city3. Then if city ...
- PAT-1013 Battle Over Cities (25 分) DFS求连通块
It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...
- PAT Advanced 1013 Battle Over Cities (25) [图的遍历,统计连通分量的个数,DFS,BFS,并查集]
题目 It is vitally important to have all the cities connected by highways in a war. If a city is occup ...
- 1013 Battle Over Cities (25分) 图的连通分量+DFS
题目 It is vitally important to have all the cities connected by highways in a war. If a city is occup ...
- 1013. Battle Over Cities (25)
题目如下: It is vitally important to have all the cities connected by highways in a war. If a city is oc ...
随机推荐
- C笔记01:关于printf函数输出先后顺序的讲解
关于printf函数输出先后顺序的讲解!! 对于printf函数printf("%d%d\n", a, b);函数的实际输出顺序是这样的先计算出b,然后再计算a,接着输出a,最后再 ...
- 在Code first中使用数据库里的视图
如果想在Code first中使用数据库里的视图 (不管你出于什么原因),目前的方法有2种. 一.使用Database.SqlQuery<T>("查询语句"),如: v ...
- South——谁说Django不能migrate!
零.前言 最近改一个项目,需要对已有的model进行更改.大家都知道Django自带的syncdb只能创建数据库,但是无法将已经改变的model应用的数据库中. 大概两年前遇到这个问题的时候,网上的答 ...
- 终于又可以用WLW了.
前面有一段时间没有写博客,然后过完年想继续用WLW的时候,出现问题了. An unexpected error occurred while attempting to detect weblog s ...
- 用bash命令得到Windows一个目录下的所有文件并且把结果输入到一个文件
方式一: 只用如下一条语句就可以了: tree/f>index.txt 放入一个文件中命名为"****.bat" 双击就会在该目录下生成一个index.txt文件,在这个文件 ...
- Window 中常见的dos命令
在哪里操作dos命令: win7---->开始---->所有程序---->附件---->命令提示符 win7-- ...
- Linux 命令 - ping: 向网络主机发送 ICMP ECHO_REQUEST 包
ping 命令会向指定的网络主机发送特殊网络数据报 IMCP ECHO_REQUEST.多数网络设备收到该数据包后会做出回应,通过此法即可验证网络连接是否正常. 有时从安全角度出发,通常会配置部分网络 ...
- SparkSQL之数据源
准备json文件: cat /root/1.json {"name":"Michael"} {"name":"Andy" ...
- 第一回 认识Bootstrap
Bootstrap 是Twitter推出的一个用于前端开发的开源工具包. Bootstrap是基于HTML5和CSS3开发的,它在jQuery的基础上进行了更为个性化和人性化的完善,形成一套自己独有的 ...
- .net中判断该应用程序是否已经启动,防止重复启动,监控程序启动是否正常
//获取配置文件中的需要监控项 private static string MonitorServe = ConfigurationSettings.AppSettings["Monitor ...