浙大PAT甲级-1013
2017-07-04 12:39
309 查看
网上说这是在考查并查集的相关算法
而我是用dfs暴力解决的(差点超时)
而我是用dfs暴力解决的(差点超时)
int isConnect(){ int repair=0; for(int i=1;i<=n;i++){ if(i!=c&&connect[i]==0) repair++; dfs(i); } return repair-1; }---------------------------------------------
#include <iostream>
using namespace std;
int map[1001][1001];
int emap[1001][1001];
int city[1001];
int connect[1001];
int n, m, k, c;
void init(){
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++)
map[i][j]=emap[i][j]=0;
city[i]=0;
connect[i]=0;
}
}
void occupy(int x){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
emap[i][j]=map[i][j];
for(int i=1;i<=n;i++)
emap[x][i]=emap[i][x]=0;
}
void dfs(int a){
for(int i=1;i<=n;i++){
if(i!=c&&i!=a&&emap[a][i]==1&&connect[i]==0){
connect[i]=1;
dfs(i);
}
}
}
int isConnect(){ int repair=0; for(int i=1;i<=n;i++){ if(i!=c&&connect[i]==0) repair++; dfs(i); } return repair-1; }
int main()
{
int i;
cin>>n>>m>>k;
init();
i=m;
while(i--){
int a,b;
cin>>a>>b;
map[a][b]=map[b][a]=1;
}
i=0;
while(i<k){
int a;
cin>>a;
city[i]=a;
i++;
}
for(i=0;i<k;i++){
occupy(city[i]);
c=city[i];
cout<<isConnect()<<endl;
for(int j=1;j<=n;j++)
connect[j]=0;
}
return 0;
}
相关文章推荐
- 浙大PAT甲级 1031
- *浙大PAT甲级 1051
- 浙大PAT甲级 1062
- *浙大PAT甲级 1067
- *浙大PAT甲级 1079
- 浙大PAT甲级 1088
- **PAT浙大甲级 1095
- 浙大PAT甲级-1004
- 浙大PAT甲级-1020
- 浙大pat | 浙大pat 牛客网甲级 1006 Cars on Campus (30)多区域覆盖题
- 浙大PAT甲级 1032
- 浙大PAT甲级 1040
- 浙大PAT甲级 1063
- ** 浙大PAT甲级 1068 01背包问题
- 浙大PAT甲级 1102
- **浙大PAT甲级 1010 进制转化
- 浙大 PAT 甲级1009
- PAT(甲级)1013
- 浙大PAT甲级-1008
- 浙大PAT甲级-1029