description
input
output
對於每組資料,輸出乙個整數,表示達到「平衡」狀態所需的最小代價。
sample input
2sample output36 1 5
1 2 1
2 3 2
54 5 4 3 2
1 3 1
1 2 2
2 4 3
2 5 4
4data constraint4樣例解釋:
對於第一組資料,從城市1到城市2運輸2桶石油,代價為1*2=2;從城市3往城市2運輸1桶石油,代價為2*1=2。此時三個城市儲備量都為4桶,該狀態的平衡度為0。
對於第二組資料,從城市2到城市5運輸1桶石油,代價為1*4=4;此時五個城市儲備量為(4,4,4,3,3),該狀態的非平衡度為1.2,是能達到的所有狀態的最小值。
對於20%的資料,n<=15
對於100%的資料,t<=10,n<=100,0<=si<=10000,1<=x,y<=n,1<=z<=10000。
首先容易得到結論:達到平衡狀態時,每個點的油量要麼為(sum/n),要麼為(sum/n)+1,現在每個點有乙個初始容量,在樹上相鄰的點可以轉移石油。
我們可以據此建模
對於s向每個點,連一條上下界均為初始量的邊,費用為0,表示最初容量,
對於每個點向t,連一條下界為(sum/n),上界為(sum/n)+1的邊,表示經轉移後的容量
對於原樹上相鄰的點,連一條下界為0,上界為正無窮,費用為距離的邊,表示轉移可用的路徑
然後跑一遍最小費用可行流即可
#include#include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;int g[2001],next[2011],y[2011],cost[2011],flow[2011
];int que[2000011],dis[2011],lb[2011],mn[2011],vis[2011
];int du[2011],a[2011
];int
tt,tl,n,i,s,t,s,t,x,z,q,sum,dt,tj;
ll ans;
void star(int i,int j,int k,int
l)void spfa()//
記錄dis(最短路),min(最小流量),lb(連過的邊,退流用)}}
j=next[j];
}l++;
vis[x]--;
}}void
minflow()
}}int
main()
for(i=1;i<=n;i++)
for(i=1;i)
star(t,s,
21474836,0
);
for(i=1;i<=t;i++)
minflow();
printf(
"%lld\n
",ans);}}
GDKOI2014 石油儲備計畫
description input output 對於每組資料,輸出乙個整數,表示達到 平衡 狀態所需的最小代價。sample input 2 36 1 5 1 2 1 2 3 2 54 5 4 3 2 1 3 1 1 2 2 2 4 3 2 5 4 sample output 4 4樣例解釋 對於...
GDKOI2014 石油儲備計畫
description input output 對於每組資料,輸出乙個整數,表示達到 平衡 狀態所需的最小代價。sample input 2 36 1 5 1 2 1 2 3 2 54 5 4 3 2 1 3 1 1 2 2 2 4 3 2 5 4 sample output 4 4樣例解釋 對於...
GDKOI2014模擬 樹的直徑
並不想講。樹的直徑有乙個性質。現在有兩棵樹,如果把它們隨意連一條邊,會變成一棵樹,新樹的直徑的端點一定是之前兩棵樹的直徑的共4個端點的兩個。code include include define fo i,x,y for int i x i y i define fd i,x,y for int i...