|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
传送门:https://pintia.cn/problem-sets/9 ... /994805500414115840
解:
DFS+邻接表
- #include<cstdio>
- #include<vector>
- #include<algorithm>
- using namespace std;
- int n, m, k;
- vector<int> adj[1010];
- bool vis[1010];
- void DFS(int x)
- {
- vis[x] = true;
- for (int i = 0; i < adj[x].size(); i++)
- if (!vis[adj[x][i]]) DFS(adj[x][i]);
- }
- int DFS_Traverse(void)
- {
- int num = 0;
- for (int i = 1; i <= n; i++)
- if (!vis[i] && ++num) DFS(i);
- return num;
- }
- int main(void)
- {
- scanf("%d %d %d", &n, &m, &k);
- while (m--)
- {
- int v1, v2;
- scanf("%d %d", &v1, &v2);
- adj[v1].push_back(v2);
- adj[v2].push_back(v1);
- }
- while (k--)
- {
- int check;
- scanf("%d", &check);
- fill(vis, vis + n + 1, false);
- vis[check] = true;
- printf("%d\n", DFS_Traverse() - 1);
- }
-
- return 0;
- }
复制代码 |
|