那是一棵树吗? Problem ID: 15619 WA50求救🆘

树是一种常见的数据结构.

一棵树的根节点只有一个,并且没有其他点指向它.从根节点遍历有向边,我们只会得到唯一的一个序列.

例如,下图中前两个例子是树,第三个不是:

image.pngimage.pngimage.png

给你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;
}

求救:sos:

1 个赞

建议你还是写个 dfs

3 个赞

你要先看 m 是否等于 n-1

2 个赞

然后再看是否联通

2 个赞

判一下vis就行了吧/yiw

3 个赞

sizeof(a)

1 个赞