洛谷P5049 旅行(資料加強版)

2022-05-05 21:03:11 字數 1139 閱讀 9433

題目鏈結

m=n-1是直接按字典序dfs就行,

m=n時是一棵基環樹,我們發現當乙個點在環上時,可以把它和它的乙個在環上的兒子之間的邊刪掉,然後回溯,到達它的第乙個有其他兒子的祖先的另乙個兒子上,我們只需要記錄乙個點的第乙個有其他兒子的祖先的其他兒子的最小值,貪心就行了

#include#include#include#include#includeusing namespace std;

const int maxn=500010;

const int maxm=1000010;

inline int read()

while(c>='0')x=(x<<3)+(x<<1)+c-'0',c=getchar();

return x*f;

}int n,m;

int head[maxn],num;

struct edgee[maxm];

inline void add(int x,int y);head[x]=num;

e[++num]=(edge);head[y]=num;

}int t[maxm],cnt;

void sortedge()

}int ans[maxn],tot;

bool vis[maxn],onc[maxn],flag=1;

void dfs1(int x)

}int cym;

int find(int x,int fa)

int t=find(v,x);

if(t==1)

if(t==-1)return -1;

} return 0;

}inline int get_nxt(int i)

void dfs2(int x,int fa,int mi)

int nxt=get_nxt(i);

if(!onc[x]) nxt=-1;

dfs2(v,x,nxt==-1?mi:nxt); }}

void init()

sortedge();

}int main()

for(int i=1;i<=n;++i)

printf("%d ",ans[i]);

return 0;

}

luogu p5049 旅行(資料加強版)

傳送門 給定乙個無向連通圖,不能走已經經過的點,可以回溯,每到乙個新點記錄編號,求字典序最小的編號序列。點數 n 和邊數 m 的關係 m in 1 le n le 5 times10 5 看完這題後沒啥思路 但一看 m in 感覺到好像不太對。也就是這張圖只可能是乙個樹或者乙個基環樹?那就分情況討論...

洛谷P5049 洛谷P5022 題解 旅行

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

洛谷 P1120 小木棍 資料加強版

題目 小木棍 思路 搜尋 剪枝。外層迭代加深,列舉最小長度,用dfs判斷。dfs維護3個變數x,y,lst,即用了x根木棍,當前拼到了y,上一根木棍的長度為lst。然後列舉拼接的木棍就好。剪枝一 從大到小排序。剪枝二 如果y不為0,那麼列舉的木棍長不要大於lst,不然就會重複搜尋。剪枝三 如果y 0...