// UVa 615 - Is It A Tree?
#include <iostream>
#include <stdio.h>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
#define integer signed long long int
map<integer, vector<integer> > lnk;
integer c;
map<integer, bool> taken;
void dfs(integer i) {
c++;
taken[i] = true;
for (int j = 0; j < lnk[i].size(); j++)
if (!taken[lnk[i][j]]) {
dfs(lnk[i][j]);
}
}
int main() {
integer a, b;
int t = 0;
while ((cin >> a >> b) && a >= 0 && b >= 0) {
map<integer, integer> parents;
bool empty = true;
lnk.clear();
while (a != 0 && b != 0) {
empty = false;
parents[b]++;
parents[a] = parents[a];
lnk[a].push_back(b);
cin >> a >> b;
}
bool tree = true;
integer roots = 0;
for (map<integer, integer>::const_iterator I = parents.begin(); I != parents.end(); I++) {
if (I->second == 0) {
roots++;
if (roots > 1) {
tree = false;
break;
} else {
c = 0;
taken.clear();
dfs(I->first);
}
} else if (I->second > 1) {
tree = false;
break;
}
}
t++;
if (empty || (tree && (roots == 1) && c == parents.size()))
printf("Case %d is a tree.\n", t);
else
printf("Case %d is not a tree.\n", t);
}
return 0;
}
Thursday, June 11, 2015
UVa 615 - Is It A Tree?
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment