本文主要是介绍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;elsereturn 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");elseprintf("No\n");}return 0;
}
ps:这段文字是后面补充的,这个题是过了,但这题应该用并查集来做。
这样判断是不对的,之所以过了是hdoj的数据很水的原因!
ps:再加一段文字,今天忽然发现这样做其实是对的。以前以为错是觉得有环导致边变多时判断不出来,但有环时如果还有边 = 点 - 1,那么必然有孤立点,这样在输入中它们这些孤立点不会被处理,就不会满足边 = 点 - 1了。
这篇关于HDOJ: 1272 小希的迷宫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!