poj1459Power Network

Time Limit: 2000MS   Memory Limit: 32768K
Total Submissions: 24159   Accepted: 12596

Description

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) <= pmax(u)
of power, may consume an amount 0 <= c(u) <= min(s(u),cmax(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) <= lmax(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 cmax(u)=y. The label x/y of power transport line (u,v) shows that l(u,v)=x and lmax(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 lmax(u,v). Follow np doublets (u)z, where u is the identifier of a power station and 0 <= z <= 10000 is the value of pmax(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 cmax(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.

Source

Southeastern Europe 2003

题意:

给几个发电站,给几个消耗站,再给几个转发点。

发电站只发电,消耗站只消耗电,发电站跟发电站,发电站跟消耗站可以连线,再给各个传送线的传电能力。

问你消耗站能获得的最多电是多少。

增加一个超级源点,和超级汇点。。把所给的发电站都和超级源点相连,把所给的消耗战都和超级汇点相连

Dinic

#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<climits>
#include<list>
#include<iomanip>
#include<stack>
#include<set>
using namespace std;
int head[210],tail;
struct Edge
{
	int from,to,cap,flow,next;
}edge[40010];
void add(int from,int to,int cap,int flow)
{
	edge[tail].to=to;
	edge[tail].cap=cap;
	edge[tail].flow=flow;
	edge[tail].next=head[from];
	head[from]=tail++;
}
int dis[210],ed;
bool vis[210];
bool bfs()
{
	memset(vis,0,sizeof(vis));
	queue<int>qq;
	qq.push(0);
	dis[0]=0;
	vis[0]=1;
	while(qq.size())
	{
		int from=qq.front();
		qq.pop();
		for(int i=head[from];i!=-1;i=edge[i].next)
		{
			int to=edge[i].to;
			if(!vis[to]&&edge[i].cap>edge[i].flow)
			{
				vis[to]=1;
				dis[to]=dis[from]+1;
				qq.push(to);
			}
		}
	}
	return vis[ed];
}
int cur[210];
int dfs(int from,int mn)
{
	if(from==ed||mn==0)
		return mn;
	int ans=0,f;
	for(int &i=cur[from];i!=-1;i=edge[i].next)
	{
		int to=edge[i].to,cap=edge[i].cap,flow=edge[i].flow;
		if(dis[from]+1==dis[to]&&(f=dfs(to,min(mn,cap-flow)))>0)
		{
			edge[i].flow+=f;
			edge[i^1].flow-=f;
			ans+=f;
			mn-=f;
			if(mn==0)
				break;
		}
	}
	return ans;
}
int maxflow()
{
	int ans=0;
	do
	{
		for(int i=0;i<=ed;i++)
			cur[i]=head[i];
		ans+=dfs(0,INT_MAX);
	}while(bfs());
	return ans;
}
char s[100];
int main()
{
	int n,np,nc,m;
	while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF)
	{
		tail=0;
		memset(head,-1,sizeof(head));
		while(m--)
		{
			int from,to,v;
			scanf("%s",s);
			sscanf(s,"(%d,%d)%d",&from,&to,&v);
			add(from+1,to+1,v,0);
			add(to+1,from+1,0,0);
		}
		while(np--)
		{
			int x,v;
			scanf("%s",s);
			sscanf(s,"(%d)%d",&x,&v);
			scanf("(%d)%d",&x,&v);
			add(0,x+1,v,0);
			add(x+1,0,0,0);
		}
		ed=n+1;
		while(nc--)
		{
			int x,v;
			scanf("%s",s);
			sscanf(s,"(%d)%d",&x,&v);
			scanf("(%d)%d",&x,&v);
			add(x+1,ed,v,0);
			add(ed,x+1,0,0);
		}
		printf("%d\n",maxflow());
	}
}
时间: 2024-10-11 03:52:31

poj1459Power Network的相关文章

POJ1459Power Network(dinic模板)

Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 25832   Accepted: 13481 Description A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supplied

POJ1459Power Network(电网)——最大流水题

http://poj.org/problem?id=1459 长篇阅读... 题目描述: 一个电网包含一些结点(电站.消费者.调度站),这些结点通过电线连接.每个结点u 可能 被供给s(u)的电能,s(u)≥0:同时也可能产生p(u)的电能,0≤p(u)≤pmax(u):站点u 还有可能 消费c(u)电能,0≤c(u)≤min( s(u), cmax(u) ):可能传输d(u)的电能,d(u) = s(u) + p(u) - c(u). 以上这些量存在以下限制关系:对每个电站,c(u) = 0:

ubuntu开机出现waiting for network configuration

ubuntu启动时,出现waiting for network configuration,waiting up to 60 more seconds for network configuration等,进入桌面后网络图标也不见了 解决方法,首先在 /etc/network/interfaces 文件里面无关的都删去,留下lo这个 然后再到/etc/init/failsafe.conf文件里将sleep59改成5或10,sleep50意思是等待59秒

Linux 性能监控 : CPU 、Memory 、 IO 、Network

一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70% 上下文切换:与CPU利用率相关联,如果CPU利用率状态良好,大量的上下文切换也是可以接受的 可运行队列:每个处理器的可运行队列<=3个线程 2.监控工具 vmstat $ vmstat 1 procs -----------memory---------- ---swap-- -----io---- --s

深度学习方法(十):卷积神经网络结构变化——Maxout Networks,Network In Network,Global Average Pooling

技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 最近接下来几篇博文会回到神经网络结构的讨论上来,前面我在"深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning"一文中介绍了经典的CNN网络结构模型,这些可以说已经是家喻户晓的网络结构,在那一文结尾,我提到"是时候动一动卷积计算的形式了",原因是很多工作证明了,在基本的CNN卷积计算模式之外,很多简

qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method

最近在做一个网络音乐播放器时,由于出现qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method, 而不能播放网络歌曲. 上网搜了半天,都说要在电脑那里安装openssl,然后把C:\OpenSSL-Win64\bin下的libeay32.dll和ssleay32.dll拷贝到D:\Qt\Qt5.4.2\5.4\mingw491_32\bin, 然而并没什么卵用! 我的解决办法是: Qt的这个目

bzoj1834: [ZJOI2010]network 网络扩容

努力看了很久样例一直过不了...然后各种输出中间过程啊巴拉巴拉弄了1h,没办法了...然后突然想到啊原来的边可以用啊为什么不用...于是A了...感人肺腑 #include<cstdio> #include<cstring> #include<queue> #include<iostream> #include<algorithm> using namespace std; #define rep(i,n) for(int i=1;i<=n

linux 6.x network device not active

[[email protected] Desktop]# service networkrestart Shutting down interface eth0: Error: Device\'eth0\' (/org/freedesktop/NetworkManager/Devices/0)disconnecting failed: This device is not active [FAILED] Shutting down loopback interface: [ OK ] Bring

centos linux中怎么查看和修改计算机名/etc/sysconfig/network

centos linux中怎么查看和修改计算机名 查看计算机名:在终端输入hostname 修改的话 hostname +计算机名(重启后失效)要永久修改的话要修改配置文件/etc/sysconfig/network修改hostname=你要改的名字