poj 2135 (基础费用流)

news/2024/7/24 13:18:27

题意:从1到n再到1,每条边只能走一次,求最短距离。

建图:每条边只能走一次就是流量是1,添加源点与1相连,容量为2,费用为0,n与汇点相连容量为2,费用为0;

求增广路用SPFA最短路求,,






 

#include<stdio.h>
#include<queue>
#include<string.h>
const int N=1100;
const int inf=0x3fffffff;
using namespace std;
int cost[N],start,end,n,head[N],num,pre[N],vis[N];
struct edge
{
	int st,ed,cp,flow,next;
}e[N*N];
void addedge(int x,int y,int c,int w)
{
	e[num].st=x;e[num].ed=y;e[num].cp=c; e[num].flow=w;e[num].next=head[x];head[x]=num++;
	e[num].st=y;e[num].ed=x;e[num].cp=-c;e[num].flow=0;e[num].next=head[y];head[y]=num++;
}
int SPFA()
{
	int i,u,v;
	queue<int>Q;
	for(i=start;i<=end;i++)
	{cost[i]=inf;vis[i]=0;pre[i]=-1;}
	cost[start]=0;vis[start]=1;
	Q.push(start);	
	while(!Q.empty())
	{
		u=Q.front();
		Q.pop();vis[u]=0;
		for(i=head[u];i!=-1;i=e[i].next)
		{
			v=e[i].ed;
			if(e[i].flow>0&&cost[v]>cost[u]+e[i].cp)
			{
				pre[v]=i;
				cost[v]=cost[u]+e[i].cp;
				if(vis[v]==0)
				{
					vis[v]=1;
					Q.push(v);
				}
			}
		}
	}
	if(pre[end]==-1)
		return 0;
	return 1;
}
int mincost()
{
	int MINcost=0,maxflow=0,i,minflow;
	while(SPFA())
	{
		minflow=inf;
		for(i=pre[end];i!=-1;i=pre[e[i].st])
			if(minflow>e[i].flow)
				minflow=e[i].flow;
			maxflow+=minflow;
		for(i=pre[end];i!=-1;i=pre[e[i].st])
		{
			e[i].flow-=minflow;
			e[i^1].flow+=minflow;
			MINcost+=e[i].cp;
		}			
	}
	return MINcost;
}
int main()
{
	int i,x,y,c,m;
	while(scanf("%d%d",&n,&m)!=-1)
	{
		start=0;end=n+1;num=0;
		memset(head,-1,sizeof(head));
		for(i=0;i<m;i++)
		{
			scanf("%d%d%d",&x,&y,&c);
			addedge(x,y,c,1);
			addedge(y,x,c,1);
		}
		addedge(start,1,0,2);
		addedge(n,end,0,2);
		printf("%d\n",mincost());
	}
	return 0;
}


 

 


http://www.niftyadmin.cn/n/1169962.html

相关文章

C#实现水晶报表绑定数据并实现打印4-条形码

看了上几篇文章 加上自己的调试可以打出来了 大概记录下流程 1、在dataset中加入列code 类型System.Byte[] &#xff0c;并将此列拉至水晶报表某位置 2、安装BarcodeX并添加 barcodex.ocx 引用 3、新建 from 并拉一个 barcode过来 4、获取数据并赋值 barcodex.Caption “12345…

[USACO2004] Open提交作业(区间DP)

Description 贝西在哞哞大学选修了C门课&#xff0c;她要把这些课的作业交给老师&#xff0c;然后去车站和同学们一 起回家。老师们在办公室里&#xff0c;办公室要等他们下课后才开&#xff0c;第i门课的办公室在Ti时刻后开放。 所有的办公室都在一条走廊上&#xff0c;这条走…

JS中的BOM与DOM

BOM&#xff08;Broswer Object Model&#xff09; 定时器: 执行一次的定时器 var taskidwindow.setTimeout(function,ms); 关闭:window.clearTimeout(taskid); 执行无数次的定时器 var taskidwindow.setInteval(function,ms); 关闭:window.clearInteval(function,ms); 框窗…

map标签的详细使用参数

map标签必须成对出现&#xff0c;即 <map> ....</map> 同时map必须和area配合使用。 img标签里的usermap属性值必须与map标签里的id和name值完全一致 area标签&#xff1a;定义图片的点击区域 area 是单标签&#xff0c;不成对。 属性&#xff1a; accesskey 快捷键…

BarcodeX(ActiveX打印控件) v5.3.0.80 免费版使用

下载 地址 &#xff1a;https://www.xiazaila.com/soft/39537.html 转载&#xff1a;https://www.xiazaila.com/soft/39537.html BarcodeX是一款active打印控件&#xff0c;软件可以识别所有类型的条形码&#xff0c;识别之后就可以导出为位图、元文件和到剪贴板等&#xff0c…

IIS发布网站、发布webservice的重要说明

本文主要讲IIS发布网站、发布webservice的重要步骤、注意事项。 一、IIS发布网站、发布webservice 1.打开IIS管理器&#xff0c;如下图 2.在【网站】上点击右键&#xff0c;添加网站&#xff0c;设置如下图&#xff1a; 如果需要使用域名访问网站&#xff0c;则必须先购买域名并…

比较两个UNIX文本文件,找出新增内容(diff和comm命令)(转)

欢迎来到小码哥的博客博客搬家啦 blog.ma6174.com比较两个UNIX文本文件&#xff0c;找出新增内容&#xff08;diff和comm命令&#xff09;(转) 本文转自 http://blog.xuyuan.me/2011/03/17/unix_diff.html 最近项目中遇到一个奇怪的bug&#xff0c;仔细检查后发现是由一行简单代…

遭遇“HTTP 错误 500.19 无法访问请求的页面,因为该页的相关配置数据无效。”

转载&#xff1a;https://www.cnblogs.com/delphinet/archive/2010/03/25/1694960.html windows 2008下IIS7 安装ASP.NET 遇到如下错误&#xff1a; HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面&#xff0c;因为该页的相关配置数据无效。 详细错误信息模块…