我得到一个由N个节点和M个边组成的图。当且仅当您可以从节点u转到v然后从v返回到u而不使用任何边缘多次时,一对节点u,v被称为良好。我需要在图表中添加最多一个边缘,以使所有节点对都很好。添加的边可以在两个已经通过某些边连接的顶点之间。但是,不允许添加自循环(从节点N到节点N的边缘)。保证图表已连接。
输入
N和M在第一行。接下来的M行中的每一行包含两个空格分隔的整数x和y,表示节点x和y之间存在边缘。
输出
如果可以通过添加至多一个边来使所有节点对良好,则输出“是”(不带引号)。否则输出“NO”(不带引号)。
Example`
Input:
4 4
3 2
1 3
2 1
1 4
Output:
YES
MY LOGIC:我将计算所有不创建循环的边缘,它们只是结束。上例中的Eg: Edge(1,4)
。为此,我计算输入中特定节点的实例,如果它等于1,那么该特定节点就是结束。如果我们有两个以上的结尾,答案将是“否”。
我的代码:
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int n,m,num[100010] = {0},temp1,temp2,i,ctr = 0; //array range is correct
scanf("%d%d",&n,&m);
while(M--) //Taking nodes
{
scanf("%d%d",&temp1, &temp2); //Node positions inputted
num[temp1]++; //Counting node instances
num[temp2]++; //^^
}
for(i=1;i<=N;i++)
{
if(num[i] == 1) //If node instances is 1, it is an end node
ctr++; //In that case, increment the counter.
}
if(N==1 || M==0 || ctr>2)
printf("NO\n");
else
printf("YES\n");
return 0;
}
提交时,我的答案不正确。我的逻辑是否存在错误,或者我只是遗漏了一些测试用例?