pat甲级1004 Counting Leaves
大家一起学习呀!因为数据量并不大,所以可以根据思路直接做
简单的并查集
下面贴上我的代码:
#include <iostream>
using namespace std;
int main()
{
int f[101] = { 0 };
int n, m, i, j, k, id, a;
int parent[101] = { 0 };
cin >> n;
if (n == 0) return 0;
cin>> m;
int m1 = m;
while (m1--)
{
cin >> id >> k; f[id] = 1;
while (k--)
{
cin >> a;
parent[a] = id;
}
}
int cnt[101];
for (i = 1; i < 101; i++)
cnt[i] = -1;
int s;
int layer = 2;
for (i = 1; i < 101; i++)
{
if (f[i] == 0 && parent[i] != 0)
{
k = i;
s = 2;
while (parent[k] != 1)
{
k = parent[k];
s++;
if (s > layer) layer = s;
}
cnt[s]++;
}
}
for (i = 1; i <= layer&&m!=0; i++)
{
if (i == 1) cout << "0";
else
{
cout << " " << cnt[i] + 1;
}
}
//cout << m << endl;
if (m!=0)
cout << endl;
else cout << 1 << endl;
return 0;
}
pat 第三个测试数据应该是
1 0