1. 程式人生 > >【Power Network】【POJ

【Power Network】【POJ

題目:

A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supplied with an amount s(u) >= 0 of power, may produce an amount 0 <= p(u) <= p max(u) of power, may consume an amount 0 <= c(u) <= min(s(u),c max(u)) of power, and may deliver an amount d(u)=s(u)+p(u)-c(u) of power. The following restrictions apply: c(u)=0 for any power station, p(u)=0 for any consumer, and p(u)=c(u)=0 for any dispatcher. There is at most one power transport line (u,v) from a node u to a node v in the net; it transports an amount 0 <= l(u,v) <= l max(u,v) of power delivered by u to v. Let Con=Σ uc(u) be the power consumed in the net. The problem is to compute the maximum value of Con. 


An example is in figure 1. The label x/y of power station u shows that p(u)=x and pmax(u)=y. The label x/y of consumer u shows that c(u)=x and c max(u)=y. The label x/y of power transport line (u,v) shows that l(u,v)=x and l max(u,v)=y. The power consumed is Con=6. Notice that there are other possible states of the network but the value of Con cannot exceed 6. 

Input

There are several data sets in the input. Each data set encodes a power network. It starts with four integers: 0 <= n <= 100 (nodes), 0 <= np <= n (power stations), 0 <= nc <= n (consumers), and 0 <= m <= n^2 (power transport lines). Follow m data triplets (u,v)z, where u and v are node identifiers (starting from 0) and 0 <= z <= 1000 is the value of l max(u,v). Follow np doublets (u)z, where u is the identifier of a power station and 0 <= z <= 10000 is the value of p max(u). The data set ends with nc doublets (u)z, where u is the identifier of a consumer and 0 <= z <= 10000 is the value of c max(u). All input numbers are integers. Except the (u,v)z triplets and the (u)z doublets, which do not contain white spaces, white spaces can occur freely in input. Input data terminate with an end of file and are correct.

Output

For each data set from the input, the program prints on the standard output the maximum amount of power that can be consumed in the corresponding network. Each result has an integral value and is printed from the beginning of a separate line.

Sample Input

2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20
7 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 (2,4)7
         (3,5)2 (3,6)5 (4,2)7 (4,3)5 (4,5)1 (6,0)5
         (0)5 (1)2 (3)2 (4)1 (5)4

Sample Output

15
6

Hint

The sample input contains two data sets. The first data set encodes a network with 2 nodes, power station 0 with pmax(0)=15 and consumer 1 with cmax(1)=20, and 2 power transport lines with lmax(0,1)=20 and lmax(1,0)=10. The maximum value of Con is 15. The second data set encodes the network from figure 1.

解題報告:

題目的意思很明確,是有n個點,有np個發電場,nc個使用者,有m條電路。最大網路流的問題,增加一個源點和匯點,之後就可以轉化為最大流的問題求解。,套模板,輸入的時候進行了優化(修改自kuangbin大大的模板---這裡)。

ac程式碼:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;

const int maxn=110;
const int inf =0x7fffffff;
int mp[maxn][maxn],path[maxn],flow[maxn],start,end;
int n;
queue<int > q;
int bfs()
{
	int i,t;
	while(!q.empty()) q.pop();//清空佇列 
	memset(path,-1,sizeof(path));
	path[start]=0;
	flow[start]=inf;
	q.push(start);
	while(!q.empty())
	{
		t=q.front();
		q.pop();
		if(t==end) break;
		for(i=0;i<=n;i++)
		{
			if(i!=start&&path[i]==-1&&mp[t][i])
			{
				flow[i]=flow[t]<mp[t][i]? flow[t]:mp[t][i];
				q.push(i);
				path[i]=t; 
			}
		}
	}
	if(path[end]==-1) 
		return -1;
	return flow[n];//最小的路徑承載力 
	 
}
int EK()
{
	int max_flow=0;
	int step,now,pre;
	while((step=bfs())!=-1)
	{
		max_flow+=step;
		now=end;
		while(now!=start)
		{
			pre=path[now];
			mp[pre][now]-=step;
			mp[now][pre]+=step;
			now=pre;
		}//倒退回去,滿足網路流的三條特性 
	}
	return max_flow;//嘴的的輸出量 
}
int main()
{
	int i,u,v,z,np,nc,m;
	while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF)
	{
		memset(mp,0,sizeof(mp));//建圖 
		while(m--)
		{
			while(getchar()!='(');
			scanf("%d,%d)%d",&u,&v,&z);
			u++;
			v++;
			mp[u][v]=z;
		}
		while(np--)
		{
			while(getchar()!='(');
			scanf("%d)%d",&u,&z);
			u++;
			mp[0][u]=z;
		}
		while(nc--)
		{
			while(getchar()!='(');
			scanf("%d)%d",&u,&z);
			u++;
			mp[u][n+1]=z;
		}//建圖完畢 
		n++;//虛結點的設立,匯點 
		start=0;
		end=n;
		printf("%d\n",EK());
	}
	return 0;
}

相關推薦

Power NetworkPOJ - 1459(網路流-最大流)

題目: A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supplied wit

Power NetworkPOJ

題目: A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be sup

Matrix Power SeriesPOJ - 3233 (等比矩陣+矩陣乘法)

題目: Given a n × n matrix A and a positive integer k, find the sum S = A + A2 +&nb

字尾陣列poj 2406Power Strings

基本應用——連續重複子串 首先這道題KMP做法很顯然,不再贅述 講講字尾陣列的做法吧 列舉長度L,再看LCP(1,L+1)是否等於n-L RMQ預處理一下就可以啦 看起來很簡單的樣紙,懶得寫程

BZOJ 1146CTSC 2008網絡管理network

b- 區間 () ren 主席樹 struct invalid rand track 一句話題意,樹鏈上帶改動區間第k大 感覺能夠dfs+主席樹O(nlog2n)O(n\log^2n)過掉,但我不會寫= = 於是寫的線段樹套平衡樹+鏈剖+二分(改

poj 2096 Collecting Bugs 概率DP逆向遞推求期望

tdi cor ros quick -a sim total 3.0 pla Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions

poj 2488 A Knight's Journey dfs字典序刷題計劃

different step center latin repr 順序 void 水題 eof A Knight‘s Journey Time Limit: 1000MS Memory Limit: 65536K Total Submis

POJ 1084 Square Destroyer舞蹈鏈重復覆蓋

函數 std sync height width inf als long end 建模很容易就能說清楚,但我一直想不出來。 要問為什麽的話可能是因為這題要先預處理出來所有正方形,而我沒做過要預處理的舞蹈鏈的題。所以想不到。 那就是預處理出來所有正方形,用一個long lo

Fibonacci矩陣乘法POJ 3070)

not org emc image const pro input The memcpy Description In the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn ? 1 + Fn ? 2 for

poj 1286 Necklace of Beads具有對稱性的計數polya計數項鍊染色方案數

【連結】 http://poj.org/problem?id=1286 【題意】 n個珠子串成一個圓,用三種顏色去塗色。問一共有多少種不同的塗色方法(翻轉,旋轉相同) 翻轉:如果n是奇數,則存在n中置換,每種置換包含n/2+1種迴圈(即輪換)。     &nb

UVA1329 Corporative Network

有N個結點,初始時每個結點的父結點都不存在。你的任務是執行一次I操作和E操作,格式如下: I u v:把結點uuu的父結點設為vvv,距離為∣u−v∣mod1000|。輸入保證執行指令前u沒有父結點。 E u:詢問uuu到根節點的距離。 所謂加權並查集

Jungle RoadsPOJ - 1251(最小生成樹)

題目: The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages s

MPI MaelstromPOJ - 1502(dijkstra+鄰接矩陣)

題目: BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distributed shared memory machine with a hierarchica

Network HDU - 3078LCA+暴力查詢

題目連結   你要是真暴力這道題還是要T的,但是,做了剪枝就會過了,我們知道對於LCA每個節點有它自己的深度,在這裡,我就將每個節點的深度陣列當作了每個節點道最初根節點的距離了。   然後,就是剪枝操作餓了:判斷是否是可行解的時候用的是dis[x]+dis[y]-2*

poj 1286 Necklace of Beads具有對稱性的計數polya計數項鍊染色方案數

【連結】 【題意】 n個珠子串成一個圓,用三種顏色去塗色。問一共有多少種不同的塗色方法(翻轉,旋轉相同) 翻轉:如果n是奇數,則存在n中置換,每種置換包含n/2+1種迴圈(即輪換)。             如果n是偶數,如果對稱軸過頂點,則存在n/2種置換,每種

文章閱讀超解像-Fast and Accurate Image Super-Resolution with Deep Laplacian Pyramid Network

【文章閱讀】【超解像】–Fast and Accurate Image Super-Resolution with Deep Laplacian Pyramid Network 論文連結:https://arxiv.org/abs/1710.01992 專案主頁:http://vll

文章閱讀超解像--Image Super-Resolution via Deep Recursive Residual Network

【文章閱讀】【超解像】–Image Super-Resolution via Deep Recursive Residual Network 論文連結:http://cvlab.cse.msu.edu/pdfs/Tai_Yang_Liu_CVPR2017.pdf caffe code

文章閱讀超解像--Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

【文章閱讀】【超解像】–Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network 論文連結:https://arxiv.org/abs/1609.04802 code(te

poj 1284 Primitive Roots 原根數論

題目連結 : 傳送門 題目大意: 求一個質數的原根個數。 先普及一下原根的定義: 設m是正整數,a是整數,若a模m的階等於euler(m),則稱a為模m的一個原根。 eg: m=7,euler(7)

POJ—1852—Ants—入門題想法題

Ants Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9698 Accepted: 4285 Description An army of ants walk on a horizontal pole of length