NOIp 2018 旅行 題解

2021-09-27 07:32:58 字數 1464 閱讀 2214

題目傳送門

題目大意:現在有一棵樹或一張只有乙個環的圖(連通),要求遍歷一遍這個圖,遍歷的順序即為乙個長度為 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 條雙向道路。每條雙向道路連線兩個城市。不存在兩條連線同一對城市的道路,也不存在一條連線乙個城市和它本身的道路。並且,從任意乙個城市出發,通過這些道路都可以到達任意乙個其他...