这道题,本来做过当时在hdu上过不去,今天改写了一边,bit pku hdu 都过了。根据题意可以看出这是一个有想图,且每一个节点的入度小于等于1,
根据这两个性质,用parent,表示此处的入度,这样这个图就可以转化为无向图了。当入度为2的时候,is_tree = 0;此时表明此书已经不是树。
因为每个节点的入度 <=1 ,根据性质可以得出顶点数目 = 边的数目+ 1
#include <stdio.h> #include <string.h> int parent[110000],vertex[110000]; int main(int argc, char *argv[]) { // FILE *fp; // fp = freopen("in.txt","r",stdin); int a,b; int edge_num,is_tree,vertex_num; int test_case = 0; while(scanf("%d%d",&a,&b),a>=0||b>=0){ ++test_case; edge_num = 0; is_tree = 1; vertex_num = 0; memset(parent,0,sizeof(parent)); memset(vertex,0,sizeof(vertex)); while(a||b){ ++edge_num; if(is_tree){ if(parent[b]!= 0){ is_tree = 0; } ++parent[b]; parent[b] = 1; if(vertex[a]==0){ vertex[a] = 1; ++vertex_num; } if(vertex[b] == 0){ vertex[b] = 1; ++vertex_num; } //if() } scanf("%d%d",&a,&b); } if(vertex_num == 0){vertex_num = 1;} if(is_tree&&vertex_num == edge_num + 1){ printf("Case %d is a tree.\n",test_case); }else{ printf("Case %d is not a tree.\n",test_case); } } return 0; }