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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

[SDOI2009]晨跑

發(fā)布時(shí)間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [SDOI2009]晨跑 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 inline ll read(){
 5     int x=0,f=1;char ch=getchar();
 6     while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
 7     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
 8     return x*f;
 9 }
10 
11 /***********************************************************/
12 
13 #define inf 0xffffff
14 const int N = 510;
15 int n,m,ans1,ans2,S,T,idc=1;//偶數(shù)開(kāi)始存,方便異或處理反向邊 
16 int dis[N],head[N],q[N],from[N];
17 bool exi[N];
18 
19 struct Edge{
20     int from, to, next, w, c;
21 }ed[100010];
22 
23 void adde(int u, int v, int w, int c){
24     ed[++idc].to = v;
25     ed[idc].w = w;
26     ed[idc].c = c;
27     ed[idc].next = head[u];
28     ed[idc].from = u;
29     head[u] = idc;
30 }
31 
32 bool spfa(){
33     int h=0, t=1, now;
34     for(int i=S; i<=T; i++) dis[i] = inf;
35     q[0] = S; dis[S] = 0; exi[S] = 1;
36     while(h != t){
37         now = q[h]; h++; if(h == 500) h = 0;
38         for(int k=head[now]; k; k=ed[k].next){
39             int v = ed[k].to; 
40             if(ed[k].w && ed[k].c + dis[now] < dis[v]){//更新距離 
41                 dis[v] = dis[now] + ed[k].c;
42                 from[v] = k;//末端點(diǎn)屬于的邊 
43                 if( !exi[v] ){
44                     exi[v] = 1;
45                     q[t++] = ed[k].to;
46                     if(t == 500) t = 0;//滾動(dòng)數(shù)組 
47                 }
48             }
49         }
50         exi[now] = 0;
51     }
52     return(dis[T] != inf);
53  }
54 
55 void mcf(){
56     int flow = inf;
57     int i = from[T];
58     while( i ){
59         flow = min(flow, ed[i].w);
60         i = from[ed[i].from];
61     }//沿著路徑尋找最大流量 
62     ans1++;//多一條路徑 
63     i = from[T];
64     while( i ){
65         ans2 += flow * ed[i].c;
66         ed[i].w -= flow;
67         ed[i^1].w += flow;
68         i = from[ed[i].from];
69     }//沿著路徑統(tǒng)計(jì)花費(fèi),順便調(diào)整限流 
70 }
71 
72 int main(){
73     n = read(); m = read();
74     S = 1; T = n+n;
75     for(int i = 1;i <= m;i++){
76         int u, v, w;
77         u = read(); v = read(); w = read();
78         adde(u+n, v, 1, w);
79         adde(v, u+n, 0, -w);
80     }
81     //為了限制點(diǎn)流量,往往選擇拆點(diǎn),i為入點(diǎn),i+n為出點(diǎn) 
82     for(int i=2; i<n; i++)
83         adde(i, i+n, 1, 0), adde(i+n, i, 0, 0);//拆出來(lái)的兩點(diǎn)相連,限流 
84     adde(1, S+n, inf, 0); adde(S+n, 1, 0, 0);
85     adde(n, T, inf, 0); adde(T, n, 0, 0);
86     while(spfa()) mcf();
87     printf("%d %d\n", ans1, ans2);
88     return 0;
89 }

?

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

總結(jié)

以上是生活随笔為你收集整理的[SDOI2009]晨跑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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