發現 \(m\) 只有兩種取值,於是可做了
樹的直接貪心
圖的列舉環上的邊去掉,然後做樹的貪心,搜的時候剪一下枝吧
寫得有點亂
#include#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
#define ft first
#define sd second
#define pb(a) push_back(a)
#define mp(a,b) std::make_pair(a,b)
#define rep(a,b,c) for(register int a=(b),a##end=(c);a<=a##end;++a)
#define dep(a,b,c) for(register int a=(b),a##end=(c);a>=a##end;--a)
const int maxn=5000+10;
int n,m,e=1,key,beg[maxn],nex[maxn<<1],to[maxn<<1],was[maxn<<1],cnt,dfn[maxn],ans[maxn],vis[maxn],arv[maxn];
std::vectorv[maxn];
std::pairext,from[maxn];
struct unique
inline int found(int x)
inline int link(int x,int y,int val) };
unique u;
templateinline void read(t &x)
templateinline void write(t x,char ch='\0')
templateinline bool chkmin(t &x,t y)
templateinline t min(t x,t y)
inline void insert(int x,int y,int z)
inline void sortdfs(int x,int f)
inline void initdfs(int x,int f)
inline bool dfs(int x,int f,int &fl)
inline int lca(int u,int v)
inline void solve(int x)
}int main()
if(m==n-1)sortdfs(1,0),dfs(1,0,fl=1),memcpy(ans,dfn,sizeof(ans));
else
rep(i,1,n)write(ans[i],i==iend?'\n':' ');
return 0;
}
NOIp 2018 旅行 題解
題目傳送門 題目大意 現在有一棵樹或一張只有乙個環的圖 連通 要求遍歷一遍這個圖,遍歷的順序即為乙個長度為 n nn 的序列,要求字典序最小的序列。假如是一棵樹的話,顯然貪心即可,從 1 11 出發,每次往編號小的走就好了。假如只是多一條邊的話,列舉刪掉那一條邊,然後變成一棵樹來做。因為每次都要往編...
比賽遊記 NOIP2018遊記
往期回顧 比賽遊記 noip2017遊記 轉眼間又過去了一年,當年還是初中生的我已經搖身一變成為了ahsofnu的高一學生。回顧這一年我好像也沒學什麼新東西,要說有用的可能就無旋treap吧,不知道能不能在noip上起到作用。noip2018 rp 普及組是沒去了,聽說普及很難,我看了看好像也沒啥 ...
比賽 NOIP2018 鋪設道路
原題,而且還是ccf自己的 考慮對於一段最長不上公升序列,無論如何都至少有序列第乙個數的貢獻,可以知道,這個貢獻是可以做到且最少的 然後對於序列最後一位,也就是最小的那乙個數,可以和後面序列拼起來的就拼起來,所以後面的序列需要補償的貢獻就是差分 簡化一下,ans sum n max include ...