1. 程式人生 > >J: Our Journey of Dalian Ends

J: Our Journey of Dalian Ends

urumqi-2017-online

存一個學姐用的模板(:з」∠)

因為每個點只能經過一次,拆點,限制為1
以上海為起點
大連和西安兩個點再連向終點,限制為1
判斷最終流量是否為2就能判斷是否從大連開始到西安結束了

#include<bits/stdc++.h>
using namespace std;
#define N 30005
#define M 60005
#define INF 10000000
#define ms(x,y) memset(x,y,sizeof(x))
const double EPS=1e-9;
struct Edge{
    int u,v,cap,next;
    double
cost; }edge[M<<1]; int sumFlow,edgeNum,head[N],pp[N]; double dist[N]; bool inq[N]; void add(int u,int v,int cap,double cost){ edge[edgeNum].u=u;edge[edgeNum].v=v;edge[edgeNum].cap=cap;edge[edgeNum].cost=cost; edge[edgeNum].next=head[u];head[u]=edgeNum++; edge[edgeNum].u=v;edge[edgeNum].v=u;edge[edgeNum].cap=0
;edge[edgeNum].cost=-cost; edge[edgeNum].next=head[v];head[v]=edgeNum++; } bool SPFA(int s,int t,int n){ int i,u,v; queue<int>q; ms(inq,0),ms(pp,-1); for(i=0;i<=n;i++) dist[i]=INF; inq[s]=1;dist[s]=0; q.push(s); while(!q.empty()){ u=q.front();q.pop();inq[u]=0
; for(i=head[u];i!=-1;i=edge[i].next){ v=edge[i].v; if(edge[i].cap&&dist[v]>dist[u]+edge[i].cost+EPS){ dist[v]=dist[u]+edge[i].cost; pp[v]=i; if(!inq[v]){ q.push(v); inq[v]=1; } } } } if(pp[t]==-1) return false; return true; } pair<int,double> MCMF(int s,int t,int n){ int flow=0,i,minflow; double mincost=0; while(SPFA(s,t,n)){ minflow=INF; for(i=pp[t];i!=-1;i=pp[edge[i].u]) minflow=min(edge[i].cap,minflow); flow+=minflow; for(i=pp[t];i!=-1;i=pp[edge[i].u]) edge[i].cap-=minflow,edge[i^1].cap+=minflow; mincost+=dist[t]*minflow; } return make_pair(flow,mincost); } map<string,int>MP; int main() { int t,n,m,i,u[N],v[N],w[N]; scanf("%d",&t); while(t--){ edgeNum=0,ms(head,-1); MP.clear(); MP["Shanghai"]=1; MP["Dalian"]=2; MP["Xian"]=n=3; scanf("%d",&m); string s; for(i=1;i<=m;i++){ cin>>s; if(MP.find(s)==MP.end()) MP[s]=++n; u[i]=MP[s]; cin>>s; if(MP.find(s)==MP.end()) MP[s]=++n; v[i]=MP[s]; scanf("%d",&w[i]); } for(i=1;i<=m;i++) if(u[i]==1) add(u[i],v[i],1,w[i]); else if (v[i]==1) add(v[i],u[i],1,w[i]); else add(u[i]+n-1,v[i],1,w[i]),add(v[i]+n-1,u[i],1,w[i]); // add(0,1,2,0); for(i=2;i<=n;i++) add(i,i+n-1,1,0); add(2+n-1,2*n,1,0); add(3+n-1,2*n,1,0); pair<int,double> p=MCMF(1,2*n,2*n); if(p.first==2) printf("%.0f\n",p.second); else puts("-1"); } }

相關推薦

J: Our Journey of Dalian Ends

urumqi-2017-online 存一個學姐用的模板(:з」∠) 因為每個點只能經過一次,拆點,限制為1 以上海為起點 大連和西安兩個點再連向終點,限制為1 判斷最終流量是否為2就能判斷是否從大連開始到西安結束了 #include<bi

ACM ICPC 烏魯木齊網路賽 J. Our Journey of Dalian Ends

Life is a journey, and the road we travel has twists and turns, which sometimes lead us to unexpected places and unexpected people. Now o

2017 ACM-ICPC 亞洲區(烏魯木齊賽區)網路賽 J.Our Journey of Dalian Ends【最小費用最大流】

Life is a journey, and the road we travel has twists and turns, which sometimes lead us to unexpected places and unexpected people. Now our journey of Dal

2017烏魯木齊網絡賽 JOur Journey of Dalian Ends ( 最小費用最大流 )

增廣路 ali += ase turn src eof weight flow 題目鏈接 題意 : 給出一副圖,大連是起點,終點是西安,要求你求出從起點到終點且經過中轉點上海的最小花費是多少? 分析 : 最短路是最小費用最大流的一個特例,所以有些包含中轉限制或者經過點

計蒜客-2017 ACM-ICPC 亞洲區(烏魯木齊賽區)網路賽JOur Journey of Dalian Ends (最小費用最大流)

題意: 給定若干個城市,出發點為大連,目的地為西安,但是要求中途必須經過上海,並且圖中每個城市只能經過一次,給出m條路(雙向道路),走第i條路需要wi代價,求所有滿足要求的方案中花費的最小代價,如果沒有滿足的方案,輸出-1。 思路: 相當於求從大連到上海加上西安到上海花費的

Our Journey of Dalian Ends

給定雙向邊,求Dalian到Shanghai再到Xian,途中不經過統一的城市,求最短距離 費用流 源點往Shanghai連邊,城市進行拆點處理(流量為1,確保只經過一次),然後城市之間流量為1,費用為對應距離,最後Dalian和Xian與匯點連邊

Our Journey of Xian Ends

ron using one 圖片 map gin anti def cos Our Journey of Xian Ends 鏈接:here 參考http://blog.csdn.net/wangshuhe963/article/details/78516821 費

2017 icpc 青島站 K. Our Journey of Xian Ends 最小費用流

K. Our Journey of Xian Ends 題意:這英文題真是比六級閱讀還難讀,給你一個無向圖,求西安-->上海-->青島-->上海的最短路,每個城市有一個機場,但是上海有兩個機場 虹橋機場和浦東機場,上海這兩個機場可以互達(你可以從西安到浦東,然後再從虹橋到青

2017 icpc 青島站 K. Our Journey of Xian Ends 最小費用流

題意:這英文題真是比六級閱讀還難讀,給你一個無向圖,求西安-->上海-->青島-->上海的最短路,每個城市有一個機場,但是上海有兩個機場 虹橋機場和浦東機場,上海這兩個機場可以互達(你可以從西安到浦東,然後再從虹橋到青島,距離為0),每個機場只能下飛機和

2017 ACM 區域賽青島站(現場賽) K Our Journey of Xian Ends

Life is a journey, and the road we travel has twists and turns, which sometimes lead us to unexpected places and unexpected people. Now our journey of Xia

用keil編譯提示 warning: #...: last line of file ends without a newline

str 空格 LG ref title mil div 警告 OS 用keil編譯提示 warning: ......: last line of file ends without a newline 最後一行回車後還要保證是在第一列,新一行不能有空格等空字符才能不出

A journey of English learning two

    This mini-story learning process made me feel like I was back to my original state, almost every time I could not get in

A journey of English learning one

    The ten day is fleeting, and the acceptance of the third little stories is coming soon, though this is often topic,But f

Quickbooks Search Platform — Our Journey to AWS

Quickbooks Search Platform — Our Journey to AWS“The journey is what brings us happiness, not the destination”— Dan Millman, Way of the Peaceful WarriorIn a

Getting to Go: The Journey of Go's Garbage Collector

12 July 2018 This is the transcript from the keynote I gave at the International Symposium on Memory Managem

使用新手MDK時候,有關警告:last line of file ends without a newline解決辦法

Keil軟體編譯的時候,總會出現一個問題:warning:  #1-D: lastline of file ends without a newline!如下圖所示: 百度下結局辦法就是 將游

j-3. .each(),for each ,for of ,for in-------待續

包裝 修改 -- 方式 () this指向 element sof UNC .each()是一個for循環的包裝叠代器.each()通過回調的方式處理,並且會有2個固定的實參,索引與元素(從0開始計數).each()回調方法中的this指向當前叠代的dom元素<but

2017CCPC 杭州 J. Master of GCD【差分標記/線段樹/GCD】

include bits puts 一個 ear size assert amp 就是 給你一個n個初始元素都為1的序列和m個詢問q。 詢問格式為:l r x(x為2or3) 最後求1~n所有數的GCD GCD:把每個數分別分解質因數,再把各數中的全部公有質因數提取出來連乘

牛客網暑期ACM多校訓練營(第六場)J Heritage of skywalkert

題意 lcm time \n main 一句話 bsp boa first 題目鏈接:https://www.nowcoder.com/acm/contest/144/J 時間限制:C/C++ 1秒,其他語言2秒空間限制:C/C++ 262144K,其他語言524288K6

NEERC17 J Journey from Petersburg to Moscow

top inline ORC src names get div lld 技術分享 CF上可以提交。 鏈接 依然是很妙的解法。 我們可以枚舉每一個出現過的邊權$L$,然後把所有邊的邊權減掉這個$L$,如果小於$L$就變為$0$,然後跑一遍最短路然後加上$k * L$