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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ2391(最大流Isap+Floyd+二分)

發(fā)布時(shí)間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ2391(最大流Isap+Floyd+二分) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題意:給出一些牛棚,開始牛棚邊有一些牛,牛棚之間有路相連,走一條路會(huì)花費(fèi)固定的時(shí)間。牛在牛棚邊吃草,下雨時(shí)牛得躲進(jìn)牛棚,每個(gè)牛棚容量有限。
求在所有牛都能進(jìn)牛棚時(shí)最少需要多少時(shí)間。

這題和POJ2112相似,不過這題要拆點(diǎn),把每個(gè)點(diǎn)拆成兩個(gè)點(diǎn),如果直接連原圖中的點(diǎn),是不對(duì)的。網(wǎng)上找了大神的圖

當(dāng)二分到T = 70的時(shí)候,顯然我們只加入了(2, 3)和(3, 4)兩條無向邊,因?yàn)橹挥羞@兩對(duì)點(diǎn)間的最短距離小于等于70。但是從圖中也可以看出,由于沒有拆點(diǎn),點(diǎn)2也可以通過這兩條邊到達(dá)點(diǎn)4,而實(shí)際上這是不允許的。也就是說我們所加的限制條件沒有起到作用。由此可見,只有拆點(diǎn)才是正確的做法。

然后這題還要注意64位。。

詳情見代碼

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 using namespace std; 7 #define N 450 8 #define M 88888 9 typedef long long lld; 10 typedef unsigned long long u64; 11 const int inf= 0x7fffffff; 12 const lld dis_inf= 10000000000000000LL; 13 struct Edge 14 { 15 int v,w,next; 16 Edge(){} 17 Edge(int V,int W,int NEXT):v(V),w(W),next(NEXT){} 18 }edge[M]; 19 int pre[N],cur[N],dis[N],gap[N]; 20 int size,head[N]; 21 int F,P,nv,num,s,e; 22 lld map[N][N]; 23 int cow[N],col[N]; 24 lld mid; 25 void InsertEdge(int u,int v,int w) // 建邊 26 { 27 edge[size] = Edge(v,w,head[u]); 28 head[u] = size++; 29 edge[size] = Edge(u,0,head[v]); 30 head[v] = size++; 31 } 32 void Floyd() //Floyd求兩點(diǎn)間的最短距離 33 { 34 for(int k=1; k<=F; k++) 35 { 36 for(int i=1; i<=F; i++) 37 { 38 if(k==i||map[i][k]==dis_inf) continue; 39 for(int j=1; j<=F; j++) 40 { 41 if(k==j||map[k][j]==dis_inf) continue; 42 if(map[i][j] > map[i][k]+map[k][j]) 43 map[i][j] = map[i][k] + map[k][j]; 44 } 45 } 46 } 47 } 48 void Init() //建圖 49 { 50 size = 0; 51 memset(head,-1,sizeof(head)); 52 for(int i=1; i<=F; i++) 53 { 54 for(int j=1; j<=F; j++) 55 { 56 if(map[i][j] <= mid) 57 InsertEdge(i,F+j,inf); //如果兩點(diǎn)間的距離<=mid,兩點(diǎn)間建條權(quán)值為inf的邊,表示這條邊可以容納無數(shù)奶牛 58 } 59 InsertEdge(s,i,col[i]); //對(duì)源點(diǎn)到每個(gè)草地建邊,權(quán)值為草地的容量 60 InsertEdge(i+F,e,cow[i]); //對(duì)每個(gè)草地的拆點(diǎn)到匯點(diǎn)建邊,權(quán)值為草地現(xiàn)有的牛 61 } 62 } 63 int Isap(int st,int ed,int n) { //Isap模板 64 for(int i=0; i<=n; i++) { 65 cur[i] = head[i]; 66 gap[i] = dis[i] = 0; 67 } 68 int u = pre[st] = st; 69 int aug = inf ,maxflow = 0; 70 while(dis[st] < n) { 71 loop: 72 for(int &i=cur[u]; i!=-1; i=edge[i].next) { 73 int v = edge[i].v; 74 if(edge[i].w && dis[u] == dis[v] + 1) { 75 aug = min(aug,edge[i].w); 76 pre[v] = u; 77 u = v; 78 if(v==ed) { 79 maxflow += aug; 80 for(u=pre[u]; v!=st; v=u,u=pre[u]) { 81 edge[cur[u]].w -= aug; 82 edge[cur[ u]^1].w += aug; 83 } 84 aug = inf; 85 } 86 goto loop; 87 } 88 } 89 int mindis = n; 90 for(int i=head[u]; i!=-1; i=edge[i].next) { 91 int v = edge[i].v; 92 if(edge[i].w && dis[v]<mindis) { 93 cur[u] = i; 94 mindis = dis[v]; 95 } 96 } 97 if(--gap[dis[u]]==0) break; 98 gap[dis[u] = mindis+1]++; 99 u = pre[u]; 100 } 101 return maxflow; 102 } 103 104 int main() 105 { 106 while(scanf("%d%d",&F,&P)!=EOF) 107 { 108 s = 0 ; e = 2*F+1 ; nv = e+1; 109 //源點(diǎn),匯點(diǎn),節(jié)點(diǎn)數(shù) 110 num = 0; //奶牛總數(shù) 111 for(int i=1; i<=F; i++) 112 { 113 scanf("%d%d",&cow[i],&col[i]); 114 num += cow[i]; 115 } 116 for(int i=1; i<=F; i++) 117 for(int j=1; j<=F; j++) 118 map[i][j]= i==j ? 0 : dis_inf; 119 lld l = 0 ,r = 0; //二分的左右界 120 int u,v,w; 121 for(int i=1; i<=P; i++) 122 { 123 scanf("%d%d%d",&u,&v,&w); 124 r += w; 125 if(w < map[u][v]) map[u][v] = map[v][u] = w; 126 } 127 Floyd(); 128 int flag = 1; //標(biāo)志是否找到合適的距離 129 while(l <= r) 130 { 131 mid = l + (r-l)/2; 132 Init(); 133 if(Isap(s,e,nv)==num) 134 { 135 r = mid-1; 136 flag = 0; 137 } 138 else l = mid + 1; 139 } 140 if(flag) printf("-1\n"); 141 else printf("%lld\n",l); 142 } 143 return 0; 144 } View Code

?

轉(zhuǎn)載于:https://www.cnblogs.com/ar940507/p/3265876.html

總結(jié)

以上是生活随笔為你收集整理的POJ2391(最大流Isap+Floyd+二分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日产av在线 | 天天躁日日躁狠狠躁av麻豆男男 | 亚洲乱码国产乱码精品精剪 | 色呦呦在线观看视频 | 日韩亚洲影院 | 国产一区二区精品久久 | 午夜私人福利 | 色综合综合色 | 男女网站视频 | 紧身裙女教师三上悠亚红杏 | 国产精品视频合集 | aa视频免费观看 | 久久人人草 | 亚洲一区二区三区 | 91香蕉国产在线观看软件 | 99在线免费观看视频 | 精品人妻一区二区三区换脸明星 | 少妇饥渴难耐 | 亚洲成人av电影 | 国产麻豆一区二区三区在线观看 | 中文在线中文资源 | 国产9区 | 国产99在线播放 | 屁股夹体温计调教play | av成人在线电影 | 三级在线网址 | 久久国产精品影视 | 蜜臀久久精品久久久久 | 人妻毛片 | 国产精品理论片 | 午夜电影网站 | 日本99视频 | 涩涩涩涩涩涩涩涩涩涩 | 免费成人av网址 | 色就是色av| 2023av在线| 午夜福利视频 | 美女一区二区视频 | 日韩视频在线一区 | 嫩草伊人| 吃瓜网今日吃瓜 热门大瓜 色婷在线 | 日韩福利一区二区 | 一级片免费网站 | 福利影院在线观看 | 特黄视频免费看 | 亚洲第一成人av | 欧美一二级 | 在线观看日本一区二区 | 国产人久久人人人人爽 | av免费看网站 | 亚洲最大成人网站 | 在线麻豆视频 | 久久99久久99精品蜜柚传媒 | 亚洲国产一级 | 麻豆com | 天天干天天日 | 一本无码aⅴ久久久国产 | 欧美人与禽zozzo性之恋的特点 | 高跟肉丝丝袜呻吟啪啪网站av | 在线久 | 国产玖玖在线 | 少妇太爽了太深了太硬了 | av小片 | 国产精品美女久久久久久 | 狼人伊人干 | 久久久在线视频 | 91在线看视频 | 老头av| 成人va在线观看 | 国产三级精品在线观看 | 麻豆精品一区二区三区 | 欧美自拍视频在线观看 | 亚洲一区 视频 | 肉肉h | 欧洲性生活视频 | 精品色哟哟 | 苍井空亚洲精品aa片在线播放 | 伊人青青草 | 久久精品在线视频 | www国产www | 蝌蚪久久 | 日本不卡视频在线 | 91在线播放国产 | 亚洲女人18毛片水真多 | 激情深爱五月 | 久久成人精品一区二区 | 激情www | 爱爱小视频免费看 | 美女扒开内裤让男人桶 | 黄色片在线免费观看 | 黑人巨大精品一区二区在线 | 亚洲国产成人一区二区精品区 | 欧美一区二区三区黄色 | 国产性一乱一性一伧一色 | 国产精品污www一区二区三区 | 黄色a级片网站 | 韩国激情呻吟揉捏胸视频 | 欧美区一区二 | 日韩精品久久一区二区 |