POJ1318 http://poj.org/problem?id=1308
题目大意:给定一些二元组表示一棵“树”中的点的关系,问这些关系能不能最后组成一棵树。
即满足:1.只有一个根结点 2.每个点只有一个父亲节点。
解题思路:
凡是能组成树,即满足
点的数量 = 边的数量 + 1
那么用一个set除重,再记录输入的对数判断即可。
WA提醒 : 空树也是树。即只输入 0 0 也应对应输出
Case k is a tree.
AC代码:
#include <iostream>
#include <set>
using namespace std;
int sum;
int a,b;
set<int>s;
int i = 1;
bool f;
int main() {
while(1) {
cin >> a >> b;
if(a == -1 && b == -1) return 0;
if(a == 0 && b == 0 && !f) {
cout << "Case " << i << " is a tree.\n";
i++;
continue;
}
if(a == 0 && b == 0 && f) {
int cmp = s.size();
if (cmp == sum + 1) cout << "Case " << i << " is a tree.\n";
else cout << "Case " << i << " is not a tree.\n";
s.clear();
sum = 0;
i++;
f = false;
continue;
}
f = true;
s.insert(a);
s.insert(b);
sum++;
}
return 0;
}