【POJ3068】"Shortest" pair of paths

题目

解析:

点只能经过一次就拆成两个点,连一条容量为1费用为0的边即可。

code:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
using namespace std;

const int Maxn=70;
const int Maxm=10005;
const int inf=1e9;
int n,m,size,sum,s,t,tot;
int first[Maxn],v[Maxn],dis[Maxn],tmp[Maxn];
struct shu{int to,next,l,c;}e[Maxm<<1];

inline int get_int()
{
	int x=0,f=1;char c;
	while(c!='-' && !isdigit(c)) c=getchar();
	if(c=='-') f=-1,c=getchar();
	while(isdigit(c)) x=(x<<3)+(x<<1)+c-'0',c=getchar();
	return x*f;
}

inline void add(int x,int y,int l,int c)
{
	e[++size].next=first[x],first[x]=size,e[size].to=y,e[size].l=l,e[size].c=c;
}

inline bool spfa()
{
	queue<int>q;
	for(int i=s;i<=t;i++) tmp[i]=first[i],dis[i]=inf;
	q.push(s),v[s]=1,dis[s]=0;
	while(!q.empty())
	{
	  int p=q.front();q.pop(),v[p]=0;
	  for(int u=first[p];~u;u=e[u].next)
	  {
	  	int to=e[u].to;
	  	if(dis[to]<=dis[p]+e[u].c || !e[u].l) continue;
	  	dis[to]=dis[p]+e[u].c;
	  	if(!v[to]) q.push(to),v[to]=1;
	  }
	}
	return dis[t]!=inf;
}

inline int dfs(int p,int flow)
{
	if(p==t) return flow;
	int s=0;v[p]=1;
	for(int &u=tmp[p];~u;u=e[u].next)
	{
	  int to=e[u].to;
	  if(v[to] || dis[to]!=dis[p]+e[u].c || !e[u].l) continue;
	  int minn=dfs(to,min(flow-s,e[u].l));
	  e[u].l-=minn,e[u^1].l+=minn,sum+=minn*e[u].c,s+=minn;
	  if(s==flow) break;
	}
	v[p]=0;
	return s;
}

inline void solve()
{
	while(spfa()) {while(dfs(s,inf));}
}

int main()
{
	while(1)
	{
	  n=get_int(),m=get_int();
	  if(!n) break;
	  sum=0,size=-1,t=n+1,tot++;
	  for(int i=s;i<=t;i++) first[i]=-1; 
	  add(s,1,2,0),add(1,s,0,0),add(n,t,2,0),add(t,n,0,0);
	  for(int i=1;i<=m;i++)
	  {
	  	int x=get_int()+1,y=get_int()+1,z=get_int();
	  	add(x,y,1,z),add(y,x,0,-z);
	  }
	  solve();
	  if(!e[first[s]].l) cout<<"Instance #"<<tot<<": "<<sum<<"\n";
	  else cout<<"Instance #"<<tot<<": Not possible"<<"\n";
	}
	return 0;
}
posted @   Tarjan_Zeng  阅读(29)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示