【CodeChef】PARADE(费用流,最短路)
题意:

思路:





#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
typedef long long ll;
using namespace std;
#define N 310000
#define oo 1000000000 bool inq[N];
ll s[N];
int f[][],head[N],vet[N],len1[N],len2[N],nxt[N],dis[N],q[N],a[N],
pre[N][],fan[N],n,tot,cnt,source,src,num; void add(int a,int b,int c,int d)
{
nxt[++tot]=head[a];
vet[tot]=b;
len1[tot]=c;
len2[tot]=d;
head[a]=tot; nxt[++tot]=head[b];
vet[tot]=a;
len1[tot]=;
len2[tot]=-d;
head[b]=tot;
} bool spfa()
{
for(int i=;i<=cnt;i++)
{
dis[i]=oo;
inq[i]=false;
}
int t=; int w=;
q[]=source; dis[source]=; inq[source]=true;
while(t<w)
{
t++; int u=q[t%(cnt+)]; inq[u]=false;
int e=head[u];
while(e)
{
int v=vet[e];
if(len1[e]&&dis[u]+len2[e]<dis[v])
{
dis[v]=dis[u]+len2[e];
pre[v][]=u;
pre[v][]=e;
if(!inq[v])
{
w++; q[w%(cnt+)]=v; inq[v]=true;
}
}
e=nxt[e];
}
} if(dis[src]==oo) return false;
a[++num]=dis[src];
return true;
} void mcf()
{
int k=src;
int t=oo;
while(k!=source)
{
int e=pre[k][];
t=min(t,len1[e]);
k=pre[k][];
}
k=src;
while(k!=source)
{
int e=pre[k][];
len1[e]-=t;
len1[fan[e]]+=t;
k=pre[k][];
} } int main()
{
//freopen("parade.in","r",stdin);
//freopen("parade.out","w",stdout);
for(int i=;i<=N;i++)
if(i&) fan[i]=i+;
else fan[i]=i-;
int m,Q;
scanf("%d%d%d",&n,&m,&Q);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++) f[i][j]=oo;
for(int i=;i<=n;i++) f[i][i]=;
source=n+n+; src=source+; cnt=src;
memset(head,,sizeof(head));
tot=;
for(int i=;i<=n;i++)
{
add(source,i,,);
add(i+n,src,,);
}
for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
f[x][y]=min(f[x][y],z);
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
for(int k=;k<=n;k++) f[j][k]=min(f[j][k],f[j][i]+f[i][k]); for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(i!=j&&f[i][j]<=) add(i,j+n,,f[i][j]);
num=;
while(spfa()) mcf();
s[]=;
num=min(num,n);
for(int i=;i<=num;i++)
{
//printf("%d ",a[i]);
s[i]=s[i-]+a[i];
}
printf("\n");
for(int i=;i<=Q;i++)
{
ll x;
scanf("%lld",&x);
int l=;
int r=num;
int last=;
while(l<=r)
{
int mid=(l+r)>>;
if(a[mid]<x){last=mid; l=mid+;}
else r=mid-;
}
ll ans=x*(n-last)+s[last];
printf("%lld\n",ans);
}
return ;
}
【CodeChef】PARADE(费用流,最短路)的更多相关文章
- Mining Station on the Sea HDU - 2448(费用流 || 最短路 && hc)
Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 最短路&生成树&二分图匹配&费用流问题
最短路 题意理解,建图 https://vjudge.net/problem/UVALive-4128 飞机票+行程建图 https://vjudge.net/problem/UVALive-3561 ...
- 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...
- POJ 2135 Farm Tour && HDU 2686 Matrix && HDU 3376 Matrix Again 费用流求来回最短路
累了就要写题解,近期总是被虐到没脾气. 来回最短路问题貌似也能够用DP来搞.只是拿费用流还是非常方便的. 能够转化成求满流为2 的最小花费.一般做法为拆点,对于 i 拆为2*i 和 2*i+1.然后连 ...
- POJ2135 来回最短路(简单费用流)
题意: 就是从1走到n然后再走回来,一条边只能走一次,要求路径最短. 思路: 比较水,可以直接一遍费用流,不解释了,具体的看看代码,敲这个题就是为了练 练手,好久不敲了,怕比赛 ...
- HDU4807 Lunch Time(费用流变种)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4807 Description The campus of Nanjing Universit ...
- 学习了ZKW费用流
所谓ZKW费用流,其实就是Dinic. 若干年前有一个人发明了最小增广路算法,每次用BFS找一条增广路,时间O(nm^2) 然后被DinicD飞了:我们为什么不可以在长度不变时多路增广呢?时间O(n^ ...
- 【进阶——最小费用最大流】hdu 1533 Going Home (费用流)Pacific Northwest 2004
题意: 给一个n*m的矩阵,其中由k个人和k个房子,给每个人匹配一个不同的房子,要求所有人走过的曼哈顿距离之和最短. 输入: 多组输入数据. 每组输入数据第一行是两个整型n, m,表示矩阵的长和宽. ...
- hdu3315-My Brute(费用流 or KM算法)
题目:My Brute Seaco是一个漂亮的妹子,喜欢玩一款名叫My Brute的游戏.情人节快到了,starvae和xingxing都想邀请妹子过节,但是妹子只能陪一个啊,于是两个人决定打一架,用 ...
- UVA 10806 Dijkstra, Dijkstra.(费用流)
n个点的无向带权图,求1->n的最短往返路径,不走重复边. 这里涉及到一个知识点:求无向图上s->t的最短路,其实就是费用流. 而求1->n最短往返路径呢?增加源点s,由s到1加弧, ...
随机推荐
- mongodb添加管理员密码
use admin db.createUser( { user: "adminUser", pwd: "adminPass", roles: [ { role: ...
- 如何禁止用户连续点击一个按钮事件详细JS
<input type="button" id="submit" value="提交"> <script> $(do ...
- Android四大基本组件介绍及生命周期
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一.了解四大基本组件 Activity ...
- Python9-MySQL-pymysql模块-day44
import pymysql user = input('username: ') pwd = input('password: ') conn = pymysql.connect(host=',da ...
- Compiler Error Message: CS0016: Could not write to output
打开网页是报错: Server Error in '/' Application. Compilation Error Description: An error occurred during th ...
- Java基础知识:Collection接口
*本文是最近学习到的知识的记录以及分享,算不上原创. *参考文献见文末. 这篇文章主要讲的是java的Collection接口派生的两个子接口List和Set. 目录 Collection框架 Lis ...
- HDU1272小希的迷宫
小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...
- 菜鸟学Linux - Hard Link与Symbolic Link
在学习Hard Link与Symbolic Link之前,需要大概了解一下inode与data block.在Linux的文件系统中,一个文件对应一个inode与若干个data block.inode ...
- A JavaScript Image Gallery
childNodes property: The childNodes property is a way of getting information about the children of ...
- Java面向对象---泛型
概念 泛型可以解决数据类型的安全问题,主要原理是在类声明的时候通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型. 格式 访问权限 class 类名称<泛型,泛型...>{ ...