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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P1983 车站分级

發布時間:2024/4/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1983 车站分级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題面:https://www.luogu.org/problem/P1983

首先我們來談一談鄰接表+dfs: 假設有一輛車經過三個車站ai,aj,ak(ai,aj,ak車站編號遞增) 那么在ai,aj之間的a(i+1),a(i+2),.......,a(j-1)的級別一定是嚴格小于ai和aj的級別的 同理,在aj,ak之間的a(j+1),a(j+2),.......,a(k-1)的級別也一定是嚴格小于aj,ai的級別的 那么我么可以得出,在ai,ak之間的a(i+1),a(i+2),......,a(j-1),a(j+1),........a(k-1)的級別一定是嚴格小于ai,aj和ak的級別的 如果你還沒看明白,那么我們再反過來看, ai,aj和ak的級別一定是嚴格大于在ai,ak之間的a(i+1),a(i+2),......,a(j-1),a(j+1),........a(k-1)的級別的. 看到這個,我們是不是很容易就能夠想到將整個行進路線轉為一個有向圖, 將所有小于ai,aj,ak級別的車站都和ai,aj,ak連接加一條邊,再將所有入度為0的跑一邊dfs即可 這里要注意了,光是dfs會超時,所以必須要用記憶化搜索來做Code: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<algorithm> #include<ctime> using namespace std; const int N=1000005,M=1005;//注意這里需要將數組開到2*N,否則會爆,二維數組開到N即可 long long n,m,s,x[N],to,head[N],j,a,k,ans,dp[N],i; bool used[M][M]; struct node{long long u,v,next,id; }edge[N]; void push(long long u,long long v){to++;edge[to].next=head[u];edge[to].u=u;edge[to].v=v;head[u]=to;edge[v].id++;//統計入度used[u][v]=true;//因為這里會出現重邊現象,所以每次做加邊操作后要將這條邊標記一下}//鄰接表,就不需我多做敘述了吧 long long dfs(long long u){//記憶化搜索long long l;if(dp[u]!=-1){//記搜的標志return dp[u];}dp[u]=1;for(l=head[u];l!=-1;l=edge[l].next){//鄰接表中的所有元素順序枚舉dp[u]=max(dp[u],dfs(edge[l].v)+1);//方程:f(i)=max{f(j)+1};}return dp[u]; } int main(){memset(head,-1,sizeof(head));scanf("%lld%lld",&n,&m);for(i=1;i<=m;i++){scanf("%lld",&s);for(j=1;j<=s;j++){scanf("%lld",&x[j]);}for(j=2;j<=s;j++){for(k=x[j-1]+1;k<x[j];k++){//枚舉在x[j-1]和x[j]之間的所有小于x[j],x[j-1]級別的車站for(a=1;a<=s;a++){if(!used[x[a]][k]){//如果不是重邊push(x[a],k);//當前枚舉到的車站與所有車站加邊}}}}}memset(dp,-1,sizeof(dp));//因為要取最大值,所以初始值全部為-1for(i=1;i<=n;i++){if(edge[i].id==0){//如果當前入度為0ans=max(ans,dfs(i));//每次跑一邊dfs就行}}printf("%lld\n",ans);//輸出ansreturn 0; }接著,我們再來看拓撲排序的做法 其實,拓撲排序本質上就是找到一個入度為0的點然后輸出,接著從網中刪除此頂點及所有出邊,直到不存在入度為0的點結束, 那么,我們就可以直接統計一下到底進行了幾次拓撲排序,也就是經幾次以上操作后不存在入度為0的點了. 雖然拓撲排序算法復雜度高,不易理解,效率也不容樂觀,但是我們還是要寫一寫滴.Code: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<algorithm> #include<ctime> using namespace std; const int N=1000005,M=1005; long long n,m,s,x[N],to,head[N],j,a,k,ans,i,top,vis[N],q[N]; bool used[M][M]; struct node{long long u,v,next,id; }edge[N]; void push(long long u,long long v){to++;edge[to].next=head[u];edge[to].u=u;edge[to].v=v;head[u]=to;edge[v].id++;//統計入度used[u][v]=true;//因為這里會出現重邊現象,所以每次做加邊操作后要將這條邊標記一下}//鄰接表,就不需我多做敘述了吧int main(){freopen("level.in","r",stdin);freopen("level.out","w",stdout);memset(head,-1,sizeof(head));scanf("%lld%lld",&n,&m);for(i=1;i<=m;i++){scanf("%lld",&s);for(j=1;j<=s;j++){scanf("%lld",&x[j]);}for(j=2;j<=s;j++){for(k=x[j-1]+1;k<x[j];k++){//枚舉在x[j-1]和x[j]之間的所有小于x[j],x[j-1]級別的車站for(a=1;a<=s;a++){if(!used[x[a]][k]){//如果不是重邊push(x[a],k);//當前枚舉到的車站與所有車站加邊}}}}} //之前部分不變,判重邊,加邊,記錄入度while(1){//拓撲排序top=0;for(i=1;i<=n;i++){if(!vis[i]&&!edge[i].id){//如果此點入度為0且沒有被訪問過q[++top]=i;//q是一個棧數組,記錄此次找到的入度為0的點vis[i]=1;//標記為已經訪問過了}}if(!top){//如果棧是空的,即沒有找到入度為0的點,那么說明拓撲排序已經進行完畢,退出循環break;}for(k=1;k<=top;k++){//枚舉棧里的所有元素for(i=1;i<=n;i++){if(used[q[k]][i]){//如果有這條邊used[q[k]][i]=0;//把這條邊刪除edge[i].id--;//入度--}}}ans++;//操作次數++}printf("%lld\n",ans);//輸出ansreturn 0; }

轉載于:https://www.cnblogs.com/ukcxrtjr/p/11382412.html

總結

以上是生活随笔為你收集整理的P1983 车站分级的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本激情在线 | 91网页版| 蜜臀免费av| 国产精品日韩欧美一区二区三区 | 人人做人人爽人人爱 | 黄色一级视频网站 | 天堂а√在线中文在线鲁大师 | 美日韩中文字幕 | 国内自拍区 | 国产网红在线观看 | 黑人巨大精品欧美一区二区 | 日韩精彩视频在线观看 | 欧美精品久久久久 | 成人在线观看亚洲 | 国产免费片 | 91在线视频在线观看 | 成人免费视频毛片 | 精品人妻无码一区二区色欲产成人 | 超碰99在线观看 | 99热在线免费观看 | 日本不卡一 | 国产草草浮力影院 | 中文字幕精品无码一区二区 | 精品国产一区二区三区在线 | 在线观看一区二区三区四区 | 日韩欧美的一区二区 | 制服丝袜av一区二区三区下载 | 成年视频在线 | 把高贵美妇调教成玩物 | 精品国产乱码久久久久久郑州公司 | 精品无码免费视频 | 久久久久伊人 | 亚洲午夜在线播放 | 免费在线色视频 | 午夜欧美日韩 | 国产精品九九视频 | a级片国产 | 在线观看欧美一区二区 | 啪啪网站大全 | 久久综合久久综合久久综合 | 国产丝袜在线视频 | 日日干日日干 | 欧美一级在线视频 | 成人深夜福利视频 | sm乳奴虐乳调教bdsm | 欧美一区二区在线视频 | 奇米影视盒 | 精品少妇一区二区三区 | 性――交――性――乱睡觉 | 欧洲一区二区三区在线 | 欧美日本高清视频 | 亚洲综合插| 久久久蜜桃一区二区 | 午夜爽爽爽 | 91美女视频 | 中国黄色a级 | 亚洲自拍图片 | 91精品国产日韩91久久久久久 | 欧美成人三级在线视频 | 成人tv| 欧美性猛交xxxx乱大交俱乐部 | 亚洲免费成人av | 天天摸天天操天天爽 | 亚洲性综合 | 伊人色综合久久久 | 国产欧美精品一区二区色综合 | 噜噜噜在线 | 九九久久九九久久 | 免费高清av | 日韩av在线直播 | 成年人黄色片网站 | 亚洲精品高清在线观看 | 国产高潮国产高潮久久久91 | 亚洲久久一区二区 | 亚洲精品激情 | 国产粉嫩呻吟一区二区三区 | 亚洲免费黄色片 | 日本激情影院 | 色多多视频污 | 青青操国产视频 | 国产婷婷 | 波多野结衣av在线观看 | 三男一女吃奶添下面 | 午夜精品一区二区三区在线观看 | www.黄色免费 | 欧美三级小说 | 蜜乳av网站 | 玖玖爱免费视频 | 亚洲第一综合网站 | 国产无毛av| www.777色| 日韩毛片中文字幕 | 欧美一级免费 | 欧美三级韩国三级日本三斤 | 国产精品久久久久久久久久久免费看 | 日韩精品h | 丰满饥渴老女人hd | 精品99视频 | 国产亚洲av片在线观看18女人 |