HDOJ: 1272 小希的迷宫

本题要求:1,图连通;2,图无环。(就是一棵树)

假设有n个点。

为保证图连通,则至少要有(n - 1)条边;为保证图无环,则至多有(n - 1)条边。

现在就很简单了,判读输入有多少条边,多少个点就是了。不知道输入有没有重复,所有用set直接做了。

/*
HDOJ: 1272 小希的迷宫
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>

using namespace std;

struct Edge {
    int a, b;
    
    Edge(int _a, int _b) : a(_a), b(_b) {}
    
    bool operator < (const struct Edge &t) const {
        if(a == t.a)
            return b < t.b;
        else
            return a < t.a;
    }
    bool operator == (const struct Edge &t) const {
       return ((a == t.a) && (b == t.b)); 
    }
};
set<struct Edge>edge;
set<int>node;

int main()
{
    //freopen("data.in", "rb", stdin);
    int a, b;
    while(scanf("%d%d", &a, &b) != EOF && (a != -1 || b != -1)) {
        if(a == 0 && b == 0) {
            printf("Yes\n");
            continue;
        }
        edge.clear();
        node.clear();
        edge.insert(Edge(a, b));
        node.insert(a);
        node.insert(b);
        while(scanf("%d%d", &a, &b) && (a || b)) {
            edge.insert(Edge(a, b));
            node.insert(a);
            node.insert(b);
        }
        
        if(edge.size() == node.size() - 1)
            printf("Yes\n");
        else
            printf("No\n");
    }
    
    return 0;
}

ps:这段文字是后面补充的,这个题是过了,但这题应该用并查集来做。

这样判断是不对的,之所以过了是hdoj的数据很水的原因!

ps:再加一段文字,今天忽然发现这样做其实是对的。以前以为错是觉得有环导致边变多时判断不出来,但有环时如果还有边 = 点 - 1,那么必然有孤立点,这样在输入中它们这些孤立点不会被处理,就不会满足边 = 点 - 1了。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值