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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P4700-[CEOI2011]Traffic【tarjan,dp】

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P4700-[CEOI2011]Traffic【tarjan,dp】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

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


題目大意

A×BA\times BA×B的網格上有nnn個點,然后mmm條有向/無向邊連接成平面圖,求最左邊每個點能到達的最右邊點的數量。

1≤A,B≤109,1≤n≤3×105,1≤m≤9×1051\leq A,B\leq 10^9,1\leq n\leq 3\times 10^5,1\leq m\leq 9\times 10^51A,B109,1n3×105,1m9×105


解題思路

突破點肯定是平面圖,考慮假設對于左邊兩個點a,ba,ba,b,右邊兩個A,BA,BA,Byyy坐標遞增,顯然如果aaa能走到BBB且不能走到AAA那么bbb一定不能走到AAA

也就是說每個點能到右邊一定是一個區間上的點,先tarjantarjantarjan縮點一下dpdpdp出這個區間就好了。

需要注意的是如果一個右邊的點無法被任何左邊的點走到那么它不能被統計在區間里。

時間復雜度:O(nlog?n)O(n\log n)O(nlogn)(排序)


code

#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<stack> using namespace std; const int N=3e5+10; int n,m,A,B,cnt,cot,pnt,bnt; int X[N],Y[N],p[N],b[N],l[N],r[N]; int dfn[N],low[N],col[N],in[N]; queue<int> q;stack<int> s; vector<int> G[N],T[N]; bool ins[N],v[N]; void tarjan(int x){dfn[x]=low[x]=++cnt;s.push(x);ins[x]=1;for(int i=0;i<G[x].size();i++){int y=G[x][i];if(!dfn[y]){tarjan(y);low[x]=min(low[x],low[y]);}else if(ins[y])low[x]=min(low[x],dfn[y]);}if(dfn[x]==low[x]){col[x]=++cot;while(s.top()!=x){col[s.top()]=cot;ins[s.top()]=0;s.pop();}ins[x]=0;s.pop();}return; } void dfs(int x){if(v[x])return;v[x]=1;for(int i=0;i<G[x].size();i++)dfs(G[x][i]); } void Topsort(){for(int i=1;i<=cot;i++)if(!in[i])q.push(i);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<T[x].size();i++){int y=T[x][i];in[y]--;l[y]=min(l[y],l[x]);r[y]=max(r[y],r[x]);if(!in[y])q.push(y);}}return; } bool cmp(int x,int y) {return Y[x]>Y[y];} int main() {scanf("%d%d%d%d",&n,&m,&A,&B);for(int i=1;i<=n;i++)scanf("%d%d",&X[i],&Y[i]);for(int i=1;i<=m;i++){int x,y,k;scanf("%d%d%d",&x,&y,&k);G[x].push_back(y);if(k!=1)G[y].push_back(x);}for(int i=1;i<=n;i++)if(X[i]==0)dfs(i);for(int i=1;i<=n;i++){if(X[i]==0)p[++pnt]=i;else if(X[i]==A&&v[i])b[++bnt]=Y[i];}sort(b+1,b+1+bnt);for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=cot;i++)l[i]=bnt+1,r[i]=0;for(int i=1;i<=n;i++)if(X[i]==A&&v[i]){Y[i]=lower_bound(b+1,b+1+bnt,Y[i])-b;l[col[i]]=min(l[col[i]],Y[i]);r[col[i]]=max(r[col[i]],Y[i]);}for(int x=1;x<=n;x++)for(int i=0;i<G[x].size();i++){int y=G[x][i];if(col[x]==col[y])continue;T[col[y]].push_back(col[x]);in[col[x]]++;}Topsort();sort(p+1,p+1+pnt,cmp);for(int i=1;i<=pnt;i++){int x=col[p[i]];if(!r[x]){puts("0");continue;}printf("%d\n",r[x]-l[x]+1);}return 0; }

總結

以上是生活随笔為你收集整理的P4700-[CEOI2011]Traffic【tarjan,dp】的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: www.夜夜骑| 九九热在线视频播放 | 亚洲视频一区二区三区 | 性欧美巨大乳 | 韩国伦理片免费看 | 麻豆视频在线看 | 最新自拍偷拍 | 日韩超碰在线 | 亚洲 成人 av | 久久情趣视频 | 97神马影院 | 成人无码视频 | 天天爱天天操 | 草草久久久无码国产专区 | 久久亚洲国产成人精品性色 | 精品爆乳一区二区三区 | 91精东传媒理伦片在线观看 | 国产电影一区二区三区爱妃记 | 3p视频在线观看 | 91男女视频 | 免费看成人av | 麻豆影视在线 | 中文字幕在线视频日韩 | 91成人入口 | 中文字幕 欧美 日韩 | 99热这里| 1000部拍拍拍18勿入免费视频 | 黑人av| 91精品久久久久久久久久 | 欧美午夜精品久久久久久人妖 | 日韩在线电影一区 | 懂色av蜜臀av粉嫩av分享吧最新章节 | 蜜臀久久久久久999 大陆熟妇丰满多毛xxxⅹ | 精品一二区 | r级无码视频在线观看 | 国产精品1234| 四虎精品在线观看 | 欧美黑吊大战白妞欧美大片 | 午夜h| 在线亚洲天堂 | 成人性生交大片 | 少妇又紧又深又湿又爽视频 | 性色av一区二区三区在线观看 | 伊人网在线免费观看 | 中国成熟妇女毛茸茸 | 日本成人精品在线 | 和美女啪啪| 久久大胆视频 | 又大又硬又爽免费视频 | 久久国内精品 | 国产青青操 | av天天射 | 国产精品成人一区二区三区 | 久久婷婷精品 | 国产日韩免费 | jizz国产在线 | 魔女鞋交玉足榨精调教 | 亚洲a视频在线 | 欧美日韩欧美 | 亚洲AV无码成人精品国产一区 | 97爱爱| 国产高清精品一区 | 国产av无码专区亚洲av麻豆 | 男女久久久 | japan粗暴video蹂躏 | 美女日批在线观看 | 手机在线一区二区三区 | 国产精品操 | 成人美女免费网站视频 | 黄色激情视频网站 | 午夜视频在线观看视频 | 久久αv | 黄色特级毛片 | 久久综合福利 | 黄色av资源| 精品国产无码在线 | 奇米影视第四色7777 | 一级特级毛片 | 亚洲欧美日韩高清 | 成人在线网 | 亚洲精视频 | 在线观看国产黄色 | 91国产精品 | 亚洲av无一区二区三区久久 | 人人草人人干 | 中文字幕一区二区人妻 | 最好看的2019年中文在线观看 | 男女性杂交内射妇女bbwxz | 国产成人综合亚洲 | 亚洲色图在线视频 | 乳色吐息在线观看 | 国产婷婷色 | 中文字幕一区二区免费 | 成人精品一区二区三区电影黑人 | 少妇精品偷拍高潮白浆 | 在线播放一区二区三区 | 日韩欧美在线视频观看 | 亚洲社区在线 | av国产网站 |