树是一种常见的数据结构.
一棵树的根节点只有一个,并且没有其他点指向它.从根节点遍历有向边,我们只会得到唯一的一个序列.
例如,下图中前两个例子是树,第三个不是:



给你t张有向图,请你判断每张图是否是一颗树.
输入格式
第一行包含一个正整数t(1≤t≤2000),表示测试数据组数
对于每个测试数据,第一行包含两个整数n和m(2≤n≤200000;1≤m≤200000,表示图的点数和边数.
接下来m行每行包含两个整数u和v(1≤u,v≤n,u≠v),代表一条u指向v的边.
数据保证没有重边和自环.
对于所有测试数据,数据总量不超过2∗105.
输出格式
对于每个测试数据,输出"Case k is a tree.“如果第k个测试数据是一棵树,否则输出"Case k is not a tree.”
样例#1
样例输入#1
3
6 5
5 6
4 2
4 1
5 3
4 5
9 8
8 1
7 3
6 2
8 9
7 5
7 4
7 8
7 6
6 6
2 6
5 6
5 3
4 2
4 5
4 1
样例输出#1
Case 1 is a tree.
Case 2 is a tree.
Case 3 is not a tree.
wa50代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,t,x,y,a[200005],u,v;
bool cmp(int a,int b)
{return a>b;}
int main()
{
cin>>t;for(int k=1;k<=t;k++)
{
cin>>n>>m;x=0,y=0;
memset(a,0,sizeof a);
for(int i=1;i<=m;i++)
{cin>>u>>v;a[v]++;}
sort(a+1,a+1+m,cmp);
cout<<"Case "<<k<<" is ";
if(a[1]>1)cout<<"not ";
cout<<"a tree."<<endl;
}
return 0;
}
求救![]()