日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P5659-[CSP-S2019]树上的数【贪心】

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P5659-[CSP-S2019]树上的数【贪心】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P5659


題目大意

給出nnn個點的一棵樹,每個節點上有一個數字,你每次可以選擇一條邊刪除然后交換連接的兩個點的數字,在刪完所有數字后設pip_ipi?表示數字iii所在節點編號,要求使得排列ppp的字典序。

1≤n≤2000,1≤T≤101\leq n\leq 2000,1\leq T\leq 101n2000,1T10


解題思路

好陰間的題目

考慮對與一個點xxx的轉移肯定是如下圖類似的情況并且每個點連接的邊的刪除順序是獨立的(如果不獨立證明出現了環,樹上顯然沒有環)

考慮上圖我們發現產生的數字搬運是x→1,1→2,2→3,3→xx\rightarrow 1,1\rightarrow 2,2\rightarrow 3,3\rightarrow xx1,12,23,3x,而邊的刪除順序是(x,3)→(x,2)→(x,1)(x,3)\rightarrow (x,2)\rightarrow (x,1)(x,3)(x,2)(x,1)(紅色箭頭畫反了)。不難發現的是因為必須刪除所有邊,所以最后肯定是xxx和它周圍的節點連接形成一個搬運環。

然后因為字典序最小,所以考慮貪心,如果快速對于(s,t)(s,t)(s,t)判斷sss上的數字能否搬運到ttt上。

先考慮在s→ts\rightarrow tst路徑上(不包括s,ts,ts,t)的節點xxx需要滿足的條件,記上一個節點為fafafa,下一個節點為yyy

  • 如果有數字走y→xy\rightarrow xyx或者x→fax\rightarrow faxfa搬運過那么不行
  • 如果邊x→yx\rightarrow yxy或者fa→xfa\rightarrow xfax正反都搬運過數字那么不行
  • 如果此時對于節點xxx的邊中加上fa→yfa\rightarrow yfay這條邊后形成了一個環且不是所有xxx及其周圍的數字都在環上的話那么顯然不行。
  • 如果邊(x,fa)(x,fa)(x,fa)已經要求在(x,y)(x,y)(x,y)之后再刪除了那么顯然不合法(也就是紅色的箭頭形成了環)

對于根節點和終止節點則類似只是減少了上面第444個要求因為顯然這條邊必須是最早/最晚刪除的。

然后用類似鏈表的結構來維護每個節點連出去邊的情況來判斷后兩個條件,前兩個條件則很好判斷。并且如果保證了對于每個節點xxx都滿足它上面的數字不會搬回自己所在處就可以保證所有邊必須刪除了。

然后每次從未確定的最小的數字所在節點出發搜索所有合法的終止節點然后拿最小值再沿路更新即可。

時間復雜度:O(Tn2)O(Tn^2)O(Tn2)


code

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=2100; struct node{int to,next; }a[N<<1]; int T,n,tot,ls[N],p[N],d[N],d1[N],d2[N],fa[N]; int from[N],got[N],e[N][N],las[N][N],nxt[N][N]; bool v[N]; void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;d[y]++;return; } void dfs(int x,int root){for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa[x])continue;v[y]=1;if(x!=root){if(e[fa[x]][x]==fa[x]||e[x][y]==x)v[y]=0;//反向搬運過 if(e[fa[x]][x]==0||e[x][y]==0)v[y]=0;//被別的方向走過if(nxt[x][y]==from[x]&&las[x][fa[x]]==got[x]&&d[x]*2+d1[x]+d2[x]-2>0)v[y]=0;//構成一條偏序鏈 if(nxt[x][y]==fa[x])v[y]=0;//構成環 }else{if(e[x][y]==x)v[y]=0;//反向搬運過 if(e[x][y]==0)v[y]=0;//被別的方向走過if(from[x]&&nxt[x][y]==from[x]&&d[x]+d1[x]+d2[x]-1>0)v[y]=0;//構成一條偏序鏈 }v[y]&=v[x];fa[y]=x;dfs(y,root);}if(x==root)v[x]=0;else{if(from[x])v[x]=0;if(got[x]&&nxt[x][got[x]]==fa[x]&&d[x]+d1[x]+d2[x]-1>0)v[x]=0;}return; } int main() {scanf("%d",&T);while(T--){scanf("%d",&n);tot=0;memset(d,0,sizeof(d));memset(ls,0,sizeof(ls));memset(d1,0,sizeof(d1));memset(d2,0,sizeof(d2));memset(got,0,sizeof(got));memset(from,0,sizeof(from));for(int i=1;i<=n;i++)scanf("%d",&p[i]);for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);e[x][y]=e[y][x]=-1;las[x][y]=nxt[x][y]=y;las[y][x]=nxt[y][x]=x;}for(int i=1;i<=n;i++){int x=p[i];for(int j=1;j<=n;j++)fa[j]=0;v[x]=1;dfs(x,x);int y=0;for(int j=1;j<=n;j++)if(v[j]){y=j;break;}printf("%d ",y);from[y]=fa[y];while(fa[y]!=x){if(e[fa[y]][y]==-1){e[fa[y]][y]=e[y][fa[y]]=fa[y];d[y]--;d2[y]++;d[fa[y]]--;d1[fa[y]]++;}else{e[fa[y]][y]=e[y][fa[y]]=0;d1[y]--;d2[fa[y]]--;}int z=y;y=fa[y];las[y][nxt[y][z]]=las[y][fa[y]];nxt[y][las[y][fa[y]]]=nxt[y][z];//數字fa->y->z,所以y->fa的連接y->z }if(e[fa[y]][y]==-1){e[fa[y]][y]=e[y][fa[y]]=fa[y];d[y]--;d2[y]++;d[fa[y]]--;d1[fa[y]]++;}else{e[fa[y]][y]=e[y][fa[y]]=0;d1[y]--;d2[fa[y]]--;}got[x]=y;}putchar('\n');}return 0; }

總結

以上是生活随笔為你收集整理的P5659-[CSP-S2019]树上的数【贪心】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 毛片手机在线 | 一区二区三区av在线 | 深夜视频在线观看免费 | 亚洲精品久久久久avwww潮水 | 91片看| 综合伊人久久 | 性做久久久久久 | 郑艳丽三级 | 5月婷婷6月丁香 | 欧美色图校园春色 | 国产又粗又猛又黄 | 久久久久国产免费 | 国产日韩视频在线 | 成人不卡视频 | 国产乱淫av麻豆国产免费 | 伊人影院在线播放 | 在线精品自拍 | 欧美女优视频 | 欧美aaaaaa| 天天躁夜夜躁av天天爽 | 亚洲天堂一区二区在线 | 无码人妻精品一区二区三应用大全 | 久久久久久久久久久丰满 | 91黄色免费版 | 久久伊人爱 | 人人狠狠综合久久亚洲 | 欧美成人黄色小视频 | 1024国产在线 | 亚洲精品一区 | 高清不卡av | 综合色播 | 91成人在线观看喷潮蘑菇 | 91视频在线观看视频 | 黑人与日本少妇 | porn麻豆| 国产女人和拘做受视频免费 | 天天爽天天爽夜夜爽毛片 | 亚洲国产高清在线 | 亚洲欧美日本另类 | 裸体女人a级一片 | 女优视频在线观看 | 六月丁香综合网 | 欧美视频一区二区 | 久久这里只有精品首页 | 亚洲黄色免费在线观看 | 国内自拍偷拍视频 | 国产区91 | 一区二区三区免费看视频 | 欧美激情一区在线 | 日韩精品四区 | а√天堂www在线天堂小说 | 日本少妇b | 9久久9毛片又大又硬又粗 | 男生女生羞羞网站 | 国产第十页 | 黄色网址在线看 | 久久精品丝袜 | 色视频网站 | 芭乐视频色 | 日本久久99 | 理论片久久 | 国产精品福利一区 | 黄网站免费入口 | 国产九色视频 | 国产人妖av | 日本色区 | 精品欧美在线 | 欧美 日韩 中文 | 日本少妇aaa| 我爱av好色 | 视频一区在线免费观看 | 男人天堂免费视频 | 色网在线| 成人亚洲免费 | 操操操影院 | 黄视频免费观看 | 久久久夜色精品 | 色哟哟日韩精品 | fc2ppv色の美マンに中出し | 久久精品国产精品亚洲 | 美女赤身免费网站 | 交专区videossex | 日韩大尺度在线观看 | 黄色无遮挡| 欧美 日韩 成人 | 亚洲区一 | 国产精品久久AV无码 | 免费啊v在线观看 | 中文字幕激情 | 免费三级黄 | 欧美在线观看免费高清 | 美女av片 | 杨幂毛片| 亚洲一区二区三区电影 | 国产a级淫片 | 亚洲色精品三区二区一区 | 亚洲国产日韩欧美在线观看 | 久久精品国产一区二区 | 中国18videosex极品 |