題目傳送門
題目大意:現在有一棵樹或一張只有乙個環的圖(連通),要求遍歷一遍這個圖,遍歷的順序即為乙個長度為 n
nn 的序列,要求字典序最小的序列。
假如是一棵樹的話,顯然貪心即可,從 1
11 出發,每次往編號小的走就好了。
假如只是多一條邊的話,列舉刪掉那一條邊,然後變成一棵樹來做。
因為每次都要往編號小的走,所以我把當前點能到達的點都弄起來,然後 sor
tsort
sort
一下編號,因為大量使用 sor
tsort
sort
,所以不開 o2o2
o2過不了……
**如下:
#include
#include
#include
#include
using
namespace std;
#define maxn 5010
struct edge
;edge edges[maxn]
;int n,m;
bool v[maxn]
;bool
check
(int
*a,int
*b)int a[maxn]
,t;int ans[maxn]
;bool tf[maxn]
;struct nod
;nod e[
2*maxn]
;int zhan[maxn]
,tt=0;
int len;
int first[maxn]
;void
dfs(
int x)
if(st==tt+1)
return
;sort
(zhan+st,zhan+tt+1)
;int ed=tt;
for(
int i=st;i<=ed;i++)if
(!tf[zhan[i]])
dfs(zhan[i]);
}void
buildroad
(int x,
int y)
; first[x]
=len;
}void
work()
intmain()
for(
int i=
1;i<=n;i++
)//別忘了初始化ans陣列
ans[i]
=999999999
;for
(int i=
1;i<=m;i++
) v[i]
=false;}
for(
int i=
1;i<=n;i++
)printf
("%d "
,ans[i]);
}
競賽題解 NOIP2018 旅行
坑還得一層一層的填 填到day2t1了洛谷 p5022 以下copy自洛谷,有刪減 修改 小 y 是乙個愛好旅行的 oier。她來到 x 國,打算將各個城市都玩一遍。小y了解到,x國的 n 個城市之間有 m 條雙向道路。每條雙向道路連線兩個城市。不存在兩條連線同一對城市的道路,也不存在一條連線乙個城...
比賽 NOIP2018 旅行
發現 m 只有兩種取值,於是可做了 樹的直接貪心 圖的列舉環上的邊去掉,然後做樹的貪心,搜的時候剪一下枝吧 寫得有點亂 include define ui unsigned int define ll long long define db double define ld long double ...
NOIP2018 旅行 基環樹
小 y 是乙個愛好旅行的 oier。她來到 x 國,打算將各個城市都玩一遍。小y了解到,x國的 n nn 個城市之間有 m mm 條雙向道路。每條雙向道路連線兩個城市。不存在兩條連線同一對城市的道路,也不存在一條連線乙個城市和它本身的道路。並且,從任意乙個城市出發,通過這些道路都可以到達任意乙個其他...