洛谷 P5022 旅行

2021-09-11 17:38:08 字數 1860 閱讀 1840

傳送門

給出乙個有n

nn個點的圖,一共有m

mm雙向邊,求如何走能使得走到的點按先後順序字典序最小

對於前60

%60\%

60%的資料來說,直接暴力dfs

dfsdf

s即可而其他的點,則根據基環樹的性質,將每條邊列舉刪去,剩下的肯定是棵樹

進而就得到了類似於60

%60\%

60%的資料的情況

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

inline ll read()

while

(s>=

'0'&&s<=

'9')

return d*f;

}int n=

read()

,m=read()

;struct nodet[

10010];

bool cmp

(node a,node b)

int ls[

10010

],cnt;

struct kinge[

10010];

int r[

5010];

void

add(

int x,

int y)

; ls[x]

=cnt++

; r[y]++;

return;}

int tf[

5010

],ac[

5010

],ans[

5010

],tttfff[

5010][

5010];

int l;

void

dfs(

int x)

return;}

queue<

int> q;

void

top()}

return;}

int b[

5010

],len;

void

check()

for(

int i=

1;i<=n;i++

) ans[i]

=ac[i]

;return;}

voidga(

int k)}}

while

(i>-1

);s[++len]

=s[1];

for(i=

1;i)return;}

intmain()

memset

(ans,

0x3f3f3f3f

,sizeof

(ans));

top();

for(

int i=

1;i<=n;i++)if

(r[i]

>1)

for(

int i=

1;i<=n;i++

)printf

("%d "

,ans[i]);

return0;

}

洛谷 P5022 旅行

day2就藍題起步不是要我命嗎 目測資料 不都是基環樹和樹嘛?基環樹我不會但是這個樹的貪心不是裸的嗎?大手一揮 這部分分我打定了!int outp 5100 len void dfs int x,int fa void main 光榮地水到了60分 對於剩下的分,我們來好好觀察一下題面 n 5000...

洛谷P5049 洛谷P5022 題解 旅行

原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...

洛谷 P5022 旅行(DFS 斷環)

首先對於m n 1的情況非常好想 即這是一棵樹,然後從1節點開始,搜一遍。注意要搜出來的序列的字典序最小,所以用鄰接矩陣來儲存,存的時候按當前節點能到的節點的編號從小到大排序。當m n的時候 這時候便是乙個基環樹,在樹上的某乙個地方會有乙個環,會發現環上的有一條邊是不會走的。然而並不確定這條邊到底是...