国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

信息學(xué)奧賽一本通 1375:騎馬修柵欄(fence) | 洛谷 P2731 [USACO3.3]騎馬修柵欄 Riding the Fences

這篇具有很好參考價值的文章主要介紹了信息學(xué)奧賽一本通 1375:騎馬修柵欄(fence) | 洛谷 P2731 [USACO3.3]騎馬修柵欄 Riding the Fences。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【題目鏈接】

ybt 1375:騎馬修柵欄(fence)
洛谷 P2731 [USACO3.3]騎馬修柵欄 Riding the Fences

【題目考點】

1. 圖論:歐拉回路
  • 歐拉回路存在的條件:圖中所有頂點的度都是偶數(shù)
  • 歐拉路徑存在的條件:圖中只有兩個度為奇數(shù)的頂點。而且這兩個頂點是歐拉路徑的起點與終點。

求解歐拉回路使用Hierholzer算法
復(fù)雜度: O ( V + E ) O(V+E) O(V+E)

【解題思路】

該圖是無向圖,頂點就是圖中的頂點,柵欄是邊。
“柵欄都是連通的”,意味著這是一個無向連通圖。
“使每個柵欄都恰好被經(jīng)過一次”,就是每條邊都經(jīng)過一次。該問題為求歐拉路徑??梢允褂肏ierholzer算法解決。
“兩頂點間可能有多個柵欄”意味著可能有重邊,但Hierholzer算法可以處理有重邊或自環(huán)的圖。
“輸出500進制表示法中最小的一個”,即為輸出字典序最小的歐拉路徑頂點序列。
只需要在實現(xiàn)Hierholzer算法時,包括選擇起始頂點或某頂點的鄰接點時,盡量選擇編號較小的頂點來訪問即可。

在輸入邊時,統(tǒng)計頂點編號的最大值,作為總頂點數(shù)量。

首先從小到大遍歷所有頂點

  • 如果存在奇數(shù)度的頂點,選擇該頂點作為起始點。
  • 如果不存在奇數(shù)度的頂點,那么所有頂點的度都是偶數(shù),任選頂點作為起始點。這里選擇1號頂點為起始點。

從起始頂點出發(fā),進行深搜,使用Hierholzer算法求歐拉路徑。為了滿足條件,必須按頂點編號從小到大訪問一個頂點的所有鄰接點。

可以使用鄰接矩陣或鄰接表完成該題。文章來源地址http://www.zghlxwxcb.cn/news/detail-477713.html

【題解代碼】

解法1:鄰接矩陣
#include<bits/stdc++.h>
using namespace std;
#define N 505
int edge[N][N], n, m, deg[N];//n:頂點數(shù) m:邊數(shù) deg[i]:頂點i的度
stack<int> stk;
void dfs(int u)//Hierholzer算法 
{
    for(int v = 1; v <= n; ++v)
    {
        if(edge[u][v])
        {
            edge[u][v]--;
            edge[v][u]--;
            dfs(v);
        }
    }
    stk.push(u);
}
int main()
{
    int f, t, st = 1;//st:起點 
    cin >> m;
    for(int i = 1; i <= m; ++i)
    {
        cin >> f >> t;
        n = max(n, max(f, t));
        edge[f][t]++;
        edge[t][f]++;
        deg[f]++;
        deg[t]++;
    }
    for(int v = 1; v <= n; ++v)//如果找到奇數(shù)度頂點,就從奇數(shù)度頂點出發(fā),否則從1出發(fā) 
    {
        if(deg[v] % 2 == 1)
        {
            st = v;
            break;
        }
    }
    dfs(st);
    while(stk.empty() == false)
    {
        cout << stk.top() << endl;
        stk.pop();
    }
    return 0;
}
解法2:鄰接表
#include<bits/stdc++.h>
using namespace std;
#define N 505
#define M 1050
struct Node
{
	int v, e;//v:頂點 e:邊編號 
	Node(){}
	Node(int a, int b):v(a), e(b){}
};
int n, m, beg[N], deg[N];//n:頂點數(shù) m:邊數(shù) deg[i]:頂點i的度 beg[i]:頂點i的鄰接點從edge[i][beg[i]]開始 
bool vis[M];//vis[i]:邊i是否已訪問過 
vector<Node> g[N];
stack<int> stk;
bool cmp(Node a, Node b)
{
	return a.v < b.v;
}
void dfs(int u)//Hierholzer算法 
{
    for(int &i = beg[u]; i < g[u].size(); ++i)
    {
    	int v = g[u][i].v, e = g[u][i].e;
        if(vis[e] == false)
        {
            vis[e] = true;
            dfs(v);
        }
    }
    stk.push(u);
}
int main()
{
    int f, t, st = 1;//st:起點 
    cin >> m;
    for(int i = 1; i <= m; ++i)
    {
        cin >> f >> t;
        n = max(n, max(f, t));
        g[f].push_back(Node(t, i));
        g[t].push_back(Node(f, i));
        deg[f]++;
        deg[t]++;
    }
    for(int v = 1; v <= n; ++v)
    	sort(g[v].begin(), g[v].end(), cmp);
    for(int v = 1; v <= n; ++v)
    {//如果找到奇數(shù)度頂點,就從奇數(shù)度頂點出發(fā),否則從1出發(fā) 
        if(deg[v] % 2 == 1)
        {
            st = v;
            break;
        }
    }
    dfs(st);
    while(stk.empty() == false)
    {
        cout << stk.top() << endl;
        stk.pop();
    }
    return 0;
}

到了這里,關(guān)于信息學(xué)奧賽一本通 1375:騎馬修柵欄(fence) | 洛谷 P2731 [USACO3.3]騎馬修柵欄 Riding the Fences的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 《信息學(xué)奧賽一本通 提高篇》

    《信息學(xué)奧賽一本通 提高篇》

    提高篇 第一部分 基礎(chǔ)算法 第1章 貪心算法 提高篇 第一部分 基礎(chǔ)算法 第1章 貪心算法_青少年趣味編程-CSDN博客 提高篇 第一部分 基礎(chǔ)算法 第1章 貪心算法 提高篇 第一部分 基礎(chǔ)算法 第1章 貪心算法_青少年趣味編程-CSDN博客 信息學(xué)奧賽一本通 提高篇 第一部分 基礎(chǔ)算法 第2章

    2024年02月16日
    瀏覽(47)
  • 信息學(xué)奧賽一本通(1398:短信計費)

    1398:短信計費 時間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB 提交數(shù): 22811 ??? 通過數(shù): 10561 【題目描述】 用手機發(fā)短信,一條短信資費為0.1元,但限定一條短信的內(nèi)容在70個字以內(nèi)(包括70個字)。如果你一次所發(fā)送的短信超過了70個字,則會按照每70個字一條短信的限制把它分

    2023年04月08日
    瀏覽(32)
  • 信息學(xué)奧賽一本通習(xí)題答案(一)

    最近在給小學(xué)生做C++的入門培訓(xùn),用的教程是信息學(xué)奧賽一本通,刷題網(wǎng)址為http://ybt.ssoier.cn:8088/index.php 現(xiàn)將部分習(xí)題的答案放在博客上,希望能給其他有需要的人帶來幫助 篇幅有限,所以從分支結(jié)構(gòu)開始,所有代碼都可以正確提交,鑒于本人能力有限以及教學(xué)需要,部分代

    2024年02月16日
    瀏覽(24)
  • 信息學(xué)奧賽一本通【1302】股票買賣

    信息學(xué)奧賽一本通1302 1302:股票買賣 時間限制: 1000 ms 內(nèi)存限制: 65536 KB ? 【題目描述】 最近越來越多的人都投身股市,阿福也有點心動了。謹記著“股市有風(fēng)險,入市需謹慎”,阿福決定先來研究一下簡化版的股票買賣問題。 假設(shè)阿福已經(jīng)準確預(yù)測出了某只股票在未來N天的

    2024年02月05日
    瀏覽(24)
  • 信息學(xué)奧賽一本通 1384:珍珠(bead)

    ybt 1384:珍珠(bead) 1. 圖論:floyd 求傳遞閉包 傳遞閉包:二維數(shù)組e, e[i][j] 表示頂點i到頂點j是否有路徑。 這是個有向圖。每顆珍珠是一個頂點,初始情況下,如果i比j重,那么i到j(luò)有一條弧。 設(shè)布爾類型數(shù)組e,為該圖的傳遞閉包,即 e[i][j] 表示i是否比j重。 先輸入已知的相

    2024年01月24日
    瀏覽(34)
  • 信息學(xué)奧賽一本通 1376:信使(msner)

    ybt 1376:信使(msner) 1. 圖論:最短路徑 每個哨所是一個頂點,哨所與哨所之間的通信線路為邊,兩哨所間通訊花費的時間為邊的權(quán)值。 記第一個哨所為頂點s,信息從第一個哨所傳遞到表示為頂點x的某哨所可能有多條路徑,每條傳送路徑有一個花費的時間,自然要選擇花費時

    2024年02月14日
    瀏覽(31)
  • 信息學(xué)奧賽一本通:1119:矩陣交換行

    【題目描述】 給定一個5×5的矩陣(數(shù)學(xué)上,一個r×c的矩陣是一個由r行c列元素排列成的矩形陣列),將第n行和第m行交換,輸出交換后的結(jié)果。 【輸入】 輸入共6行,前5行為矩陣的每一行元素,元素與元素之間以一個空格分開。 第6行包含兩個整數(shù)m、n,以一個空格分開(1≤m,

    2024年02月22日
    瀏覽(27)
  • 信息學(xué)奧賽一本通 1352 【例4-13】獎金

    ybt 1352 【例4-13】獎金 1. 圖論:拓撲排序 解法1:拓撲排序 每個人是一個頂點。 如果a獎金比b高,應(yīng)該先確定b的獎金數(shù),再確定a的獎金。 因此可以這樣定義邊:如果b的獎金比a高,那么存在有向邊a, b。 設(shè)數(shù)組money,頂點i的獎金為 money[i] 。 圖中入度為0的頂點的獎金為100。

    2024年02月16日
    瀏覽(28)
  • 信息學(xué)奧賽一本通 1341:【例題】一筆畫問題

    ybt 1341:【例題】一筆畫問題 1. 圖論:歐拉回路 求解歐拉回路使用Hierholzer算法 復(fù)雜度: O ( V + E ) O(V+E) O ( V + E ) 無向圖有歐拉回路的條件:所有頂點的度都是偶數(shù)。 無向圖有歐拉路徑的條件:有兩個頂點的度是奇數(shù),其余頂點的度都是偶數(shù)。 該題默認一定有歐拉路徑或歐拉

    2024年02月13日
    瀏覽(24)
  • 信息學(xué)奧賽一本通 1380:分糖果(candy)

    ybt 1380:分糖果(candy) 可以認為小朋友間關(guān)系的最大數(shù)量為 1 0 5 10^5 1 0 5 1. 圖論:廣搜 2. 圖論:最短路徑 每個小朋友是一個頂點,朋友間的關(guān)系是邊,糖果從每個人傳到另一個人都是1秒鐘的時間,因而該圖是無向無權(quán)圖。 假設(shè)一位小朋友A接收糖果的時刻是t,那么與該小朋友

    2023年04月08日
    瀏覽(57)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包