1. 程式人生 > >PAT 1013.Battle over cities

PAT 1013.Battle over cities

回家最好跑一遍

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;

const int maxn = 1011;
int n,m,k;
int vis[maxn] = {0};
int aja[maxn][maxn] = {0};
int tmp[maxn][maxn] = {0};
int tot = 0;

void dfs(int s)
{
    vis[
s]=1; for(int i=1;i<=n;i++) { if(aja[s][i]==1&&vis[i]==0) dfs(i); } } void reset() { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) tmp[i][j]=aja[i][j]; } int main() { int i,j,x,y; scanf("%d %d %d",&n,&m,&k); for
(i=0;i<m;i++) { scanf("%d %d",&x,&y); aja[x][y]=1; tmp[x][y]=1; } for(i=0;i<k;i++) { memset(vis,0,sizeof(vis)); reset(); tot = 0; scanf("%d",&j); vis[j]=1; for(x=1;x<=n;x++) tmp[j][x]
=tmp[x][j]=0; for(x=1;x<=n;x++) { if(vis[x]==0) { dfs(x); tot++; } } printf("%d",tot-1); if(i!=k-1) printf("\n"); } return 0; }