0
点赞
收藏
分享

微信扫一扫

计蒜客 家谱 vector临接矩阵+dfs

若如初梘 2022-06-29 阅读 78

题意:输入一个n,接下来有n-1行。
输入父亲和儿子
求n个人,每个人的直系后代有多少。
思路:vector建临接矩阵。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<cctype>
#include<stack>
#include<map>
#include<string>
#include<cstdlib>
#define ll long long
#define N 100010
using namespace std;
const ll maxn = 1e5 + 5;
//ll a[maxn],b[maxn];
bool vis[maxn];
int ans[maxn];
vector<int>a[maxn];
int n, m;
int dfs(int u) {
int res = 0;
for(int i = 0; i < a[u].size(); i++) { //这里不要搞混 是临接矩阵,所以是从0开始的列
res += dfs(a[u][i]);
}
ans[u] = res;
return res + 1;
}
int main() {
int x, y;
cin >> n;
for(int i = 0; i < n - 1; i++) {
cin >> x >> y;
a[x].push_back(y);//建立一个临接矩阵//a[x][0]=y1, a[x][1]=y2;这是从0开始记推的的。
vis[y] = 1;
}
int u;
for(int i = 1; i <= n; i++) {
if(!vis[i]) { //找到父亲
u = i;
break;
}
}
dfs(u);
for(int i = 1; i <= n; i++)
cout << ans[i] << endl;
return 0;
}


举报

相关推荐

0 条评论