C ++代码逻辑错误

时间:2016-07-15 19:58:14

标签: c++

我得到一个由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;
} 

提交时,我的答案不正确。我的逻辑是否存在错误,或者我只是遗漏了一些测试用例?

0 个答案:

没有答案