1013 Battle Over Cities
题意
给出一些列城市的道路关系,然后去掉一个城市,求解最少需要多少条路才能连通
思路
此题就是求连通域的个数
使用深搜,搜索几次就是几个连通域
注意:最后一个样例可能会超时,用C的输入输出
源码
line_number: true1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include <iostream> #include <stdio.h> #include <map> #include <vector> #include <queue> #include <string> #include <cstring> #include <unordered_map> #include <algorithm> using namespace std;
int iN, iM, iK; bool szVisited[1000]; bool szRoute [1000][1000]; void dfs(int iCity) { szVisited[iCity] = true; for(int iIndex = 0; iIndex < iN; iIndex++) { if(szRoute[iCity][iIndex] == true && szVisited[iIndex] == false) { dfs(iIndex); } } }
int main() { scanf("%d%d%d", &iN, &iM, &iK); for(int iIndex = 0; iIndex < iM; iIndex++) { int iCity1; int iCity2; cin >> iCity1 >> iCity2; szRoute[iCity1 - 1][iCity2 - 1] = true; szRoute[iCity2 - 1][iCity1 - 1] = true; }
for(int iIndex = 0; iIndex < iK; iIndex++) { int iCity; scanf("%d", &iCity); fill(szVisited, szVisited + iN, false); szVisited[iCity - 1] = true;
int iResult = 0; for(int jIndex = 0; jIndex < iN; jIndex++) { if(szVisited[jIndex] == true) { continue; } dfs(jIndex); iResult ++; } printf("%d\n", iResult - 1); } return 0; }
|