费用流。

裸的拆点最小费用流,一跑就行。

核弹预警,为何wa20多发。build函数一定要返回true。。。。。。

太可怕了

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = 5000 + 10 ;
const int maxm = 200000 + 10;
const int inf = 0x3f3f3f3f;
int g[maxn],v[maxm],nex[maxm],c[maxm],f[maxm],eid;
int n,m;
int id[maxn][2],vid,S,T;
int dist[maxn],pre[maxn];
bool inque[maxn];
queue<int> q; void addedge(int a,int b,int F,int C) {
v[eid]=b; f[eid]=F; c[eid]=C; nex[eid]=g[a]; g[a]=eid++;
v[eid]=a; f[eid]=0; c[eid]=-C; nex[eid]=g[b]; g[b]=eid++;
} bool build() {
memset(id,0,sizeof(id));
if(!(scanf("%d%d",&n,&m) && n && m)) return false;
memset(g,-1,sizeof(g)); eid=0; vid=0;
for(int i=1;i<=n;i++) {
id[i][0]=++vid;
id[i][1]=++vid;
addedge(id[i][0],id[i][1],1,0);
}
for(int i=1,u,v,w;i<=m;i++) {
scanf("%d%d%d",&u,&v,&w);
if(v!=1 && u!=n) addedge(id[u][1],id[v][0],1,w);
}
S=++vid;
T=++vid;
addedge(S,id[1][1],2,0);
addedge(id[n][0],T,2,0);
return true;
} bool SPFA() {
memset(dist,0x7f,sizeof(dist));
memset(inque,0,sizeof(inque));
memset(pre,0,sizeof(pre));
dist[S]=0;
q.push(S);
inque[S]=1;
int u;
while(!q.empty()) {
u=q.front(); q.pop();
inque[u]=0;
for(int i=g[u];~i;i=nex[i])
if(f[i] && dist[v[i]]>c[i]+dist[u]) {
dist[v[i]]=c[i]+dist[u];
pre[v[i]]=i;
if(!inque[v[i]]) {
q.push(v[i]);
inque[v[i]]=1;
}
}
}
return dist[T]<inf;
} int augment() {
int aug=inf,res=0;
for(int i=T;i!=S;i=v[pre[i]^1]) aug=min(aug,f[pre[i]]);
for(int i=T;i!=S;i=v[pre[i]^1]) {
f[pre[i]]-=aug;
f[pre[i]^1]+=aug;
res+=c[pre[i]]*aug;
}
return res;
} void solve() {
int res=0;
while(SPFA())
res+=augment();
printf("%d\n",res);
} int main() {
while(build()) solve();
return 0;
}

uva1658 admiral的更多相关文章

  1. UVA1658 Admiral 拆点法解决结点容量(路径不能有公共点,容量为1的时候) 最小费用最大流

    /** 题目:UVA1658 Admiral 链接:https://vjudge.net/problem/UVA-1658 题意:lrj入门经典P375 求从s到t的两条不相交(除了s和t外,没有公共 ...

  2. UVa1658 Admiral(拆点法+最小费用流)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51253 [思路] 固定流量的最小费用流. 拆点,将u拆分成u1和u ...

  3. UVA1658:Admiral

    题意:给定一个有向带权图,求两条不相交(无公共点)的路径且路径权值之和最小,路径由1到v 题解:这题的关键就在于每个点只能走一遍,于是我们想到以边换点的思想,用边来代替点,怎么代替呢? 把i拆成i和i ...

  4. 【HDU 6171】Admiral(搜索+剪枝)

    多校10 1001 HDU 6171 Admiral 题意 目标状态是第i行有i+1个i数字(i=0-5)共6行.给你初始状态,数字0可以交换上一行最近的两个和下一行最近的两个.求20步以内到目标状态 ...

  5. uva 1658 Admiral (最小费最大流)

    uva 1658 Admiral 题目大意:在图中找出两条没有交集的线路,要求这两条线路的费用最小. 解题思路:还是拆点建图的问题. 首先每一个点都要拆成两个点.比如a点拆成a->a'.起点和终 ...

  6. UVA - 1658 Admiral

    3. C - Admiral 题意:给定v(3<=v<=1000)个节点,e(3<=e<=10000)条边的又向加权图,求1->v的两条不相交的路径,使得权和最小. 思路 ...

  7. UVALive - 6266 Admiral 费用流

    UVALive - 6266 Admiral 题意:找两条完全不相交不重复的路使得权值和最小. 思路:比赛的时候时间都卡在D题了,没有仔细的想这题,其实还是很简单的,将每个点拆开,连一条容量为1,费用 ...

  8. Admiral(双向BFS + Hash)

    Problem Description Suppose that you are an admiral of a famous naval troop. Our naval forces have g ...

  9. UVa(1658),Admiral,海军上将,拆点,MCMF

    题目链接:https://uva.onlinejudge.org/external/16/1658.pdf 题意:求1到N的两条路(不能相交),距离和最小. 分析: 第一次做拆点,有点意思.刚开始一直 ...

随机推荐

  1. Java语法糖

    1.创建数组:String[] s = new String[]{"1","2","3"};//这种方法可以在不指定数组元素数量的情况下生成 ...

  2. Oracle 监听动态注册与静态注册

    静态注册 静态注册是在启动listener时,listener会从listener.ora文件中获取服务名及相关信息.信息包括:实例名和服务名等. --静态注册时,listener.ora中的内容如下 ...

  3. Natural Language Processing with Python - Chapter 0

    一年之前,我做梦也想不到会来这里写技术总结.误打误撞来到了上海西南某高校,成为了文科专业的工科男,现在每天除了膜ha,就是恶补CS.导师是做计算语言学的,所以当务之急就是先自学计算机自然语言处理,打好 ...

  4. 【转】How to view word document in WPF application

    How to view word document in WPF application (CSVSTOViewWordInWPF) Introduction The Sample demonstra ...

  5. cc2640-各DEMO板性能分析

    一.测试方法: 将4种模块同时上电,测量每个模块达到的最远距离.以稳定能建立通讯为连接上依据.4种板子分析为 1号阿莫DEMO板,2号咱们自己DEMO板,3号嘉源电子DEMO,4号陆程电子DEMO 全 ...

  6. Struts 2 Tutorials

    http://www.dzone.com/tutorials/java/struts-2/struts-2-tutorial/struts-2-tutorial.html http://struts. ...

  7. 判断js中的数据类型

    如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...

  8. (转)关于linux中内核编程中结构体的赋值操作(结构体指定初始化)

    网址:http://blog.chinaunix.net/uid-24807808-id-3219820.html 在看linux源码的时候,经常会看到类似于下面的结构体赋值的代码: struct d ...

  9. ubuntu下安装GTK过程

    GTK的安装过程比较繁琐,以前也安装过,但没有记录下来,Google一下记录下来备用. 利用此方法成功在ubuntu12.04下安装GTK 2.24.10 1.安装gcc/g++/gdb/make 等 ...

  10. 3.5 spring-replaced-method 子元素的使用与解析

    1.replaced-method 子元素 方法替换: 可以在运行时用新的方法替换现有的方法,与之前的 look-up不同的是replace-method 不但可以动态地替换返回的实体bean,而且可 ...