国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

HDU1878 歐拉回路

2019-11-08 02:56:38
字體:
供稿:網(wǎng)友

問題鏈接:HDU1878 歐拉回路。

問題簡述:輸入若干測試用例,判定一個無向圖是否有歐拉回路。

問題分析:無向圖的歐拉回路需要滿足兩個條件,一是圖是連通的,二是各個結(jié)點的入出度相同(有偶數(shù)個連接的邊)。

程序說明:程序中用并查集判定圖是否連通,對圖構(gòu)造一個并查集(樹)后,如果連通則其根相同。用數(shù)組degree[]統(tǒng)計各個結(jié)點的連通度。

AC的C++語言程序如下:

/* HDU1878 歐拉回路 */#include <iostream>#include <cstring>#include <vector>using namespace std;// 并查集類class UF {PRivate:    vector<int> v;public:    UF(int n) {        for(int i=0; i<=n; i++)            v.push_back(i);    }    int Find(int x) {        for(;;) {            if(v[x] != x)                x = v[x];            else                return x;        }    }    bool Union(int x, int y) {        x = Find(x);        y = Find(y);        if(x == y)            return false;        else {            v[x] = y;            return true;        }    }};const int MAXN = 1000;int degree[MAXN+1];int main(){    int n, m, src, dest;    while(cin >> n && n != 0) {        UF uf(n);        cin >> m;        // 變量初始化        memset(degree, 0, sizeof(degree));        // 統(tǒng)計各個結(jié)點的聯(lián)通度,并構(gòu)建并查集(為判定圖是否為連通圖)        while(m--) {            cin >> src >> dest;            degree[src]++;            degree[dest]++;            if(uf.Find(src) != uf.Find(dest))                uf.Union(src, dest);        }        // 判定        int root = uf.Find(1), ans = 1;        for(int i=1; i<=n; i++)            if(uf.Find(i) != root || degree[i] & 1 /*degree[i] % 2 == 1*/) {                ans = 0;                break;            }        // 輸出結(jié)果        cout << ans << endl;    }    return 0;}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新安县| 乌兰浩特市| 东兰县| 芦山县| 本溪| 常山县| 兴宁市| 鄄城县| 阜平县| 德化县| 盐池县| 明星| 布尔津县| 高唐县| 桦南县| 沙河市| 彝良县| 富民县| 宜章县| 任丘市| 乐至县| 多伦县| 紫阳县| 博爱县| 贵德县| 龙泉市| 遂川县| 青海省| 阜平县| 镇巴县| 墨江| 新和县| 威信县| 宝丰县| 板桥市| 武宣县| 大英县| 灵武市| 客服| 巴林左旗| 铜鼓县|