PAT1013

#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=1001;
int mp[maxn][maxn],vis[maxn];
int n,m,k;
void dfs(int s)
{
vis[s]=1;//置访问位,深度递归其后续节点;
int i;
for(i=1;i<=n;i++)
{
if(vis[i]==0&&mp[s][i]>0)dfs(i);
}
}
int dfstraverse(int s)
{
memset(vis,0,sizeof(vis));
int i,cnt=0;
for(i=1;i<=n;i++)
if(mp[s][i]>0)mp[s][i]=mp[i][s]=-1;//去除与被占点连接点
vis[s]=1;//第一次调用时把该点置1表示已访问,即将该点隐藏
for(i=1;i<=n;i++)
{
if(vis[i]==0)
{
dfs(i);
cnt++;
}
}
for(i=1;i<=n;i++)
if(mp[s][i]<0)mp[s][i]=mp[i][s]=1;//下次调用前回复被占点
return cnt-1;//cnt即连通分量个数,-1后即为所需连接边数
}
int main()
{
freopen("input.txt","r",stdin);
int i;
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
int a,b,s;
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
mp[a][b]=mp[b][a]=1;
}
for(i=0;i<k;i++)
{
scanf("%d",&s);
int ans=dfstraverse(s);
printf("%d\n",ans);
}
}
return 0;
}

时间: 2024-10-27 09:28:08

PAT1013的相关文章

PAT1013. Battle Over Cities(邻接矩阵、邻接表分别dfs)

//采用不同的图存储结构结构邻接矩阵.邻接表分别dfs,我想我是寂寞了吧,应该试试并查集,看见可以用并查集的就用dfs,bfs代替......怕了并查集了 //邻接矩阵dfs #include<cstdio>#include<algorithm>using namespace std;const int maxn=1001;int g[maxn][maxn];int n,tmp;bool vis[maxn];void dfs(int v){ vis[v]=true; for(int

PAT-1013 Battle Over Cities (25)

求解连通性问题,最好用的当然是并查集了,可以使用深搜或者广搜. 这道题目的意思是给定一些道路,如果把其中一个顶点去掉,那么需要建立多少条道路才能联通所有顶点. 这道题目如果用朴素的并查集的话第四个测试用例会超时,因此想到带路径压缩的并查集.递归或者非递归方式都可以,对于这道题目来说不会差别很大,不过用递归可能会有栈溢出的问题,当数据量小的时候没有什么大问题.(其实递归的深度不会很大,所以RE得风险应该很小的,已建立起来的数目只有两层.错误,比如两个帮派老大带了一群小弟,一个帮派老大投靠了另外一个

PAT1013. Battle Over Cities (25)

1013. Battle Over Cities (25) 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 othe

PAT1013. Battle Over Cities

1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue 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 cit

PAT1013. 数素数 (20)

令Pi表示第i个素数.现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数. 输入格式: 输入在一行中给出M和N,其间以空格分隔. 输出格式: 输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格. 输入样例: 5 27 输出样例: 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 思路:一定注意格式 1 #include<stdio.h>

埃式筛法筛选素数 PAT1013

内容摘要: 明确素数到底是啥数. 埃式筛法是干嘛用的. 利用java实现埃式筛法的思路. 利用埃式筛法解决PAT_1013_B 题. 筛法的改进. 素数(prime number)到底是啥数: 定义: 在大于1的自然数中,除了1和它本身以外不能再被其他数所整除. 实例化定义: 3是素数,因为它不可以被除了"1"以及自身"3"之外的数所整除. 10不是素数,因为它除了"1"以及自身"10"之外,还可以被"2"

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 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