博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LA 3353 最优巴士线路设计
阅读量:6867 次
发布时间:2019-06-26

本文共 2160 字,大约阅读时间需要 7 分钟。

给出一个 n 个点的有向图,找若干个圈,是的每个结点恰好属于一个圈。要求总长度尽量小。

 

三倍经验题 Uva 12264,HDU 1853 

这题有两种解法,一是匹配:

每个点只在一个圈中,则他有唯一的前驱和后继,也就是入度为1,出度为1,拆成 入度点和出度点,跑最小全匹配,因为是匹配,这样就保证了他在唯一的一个圈中,但是刘汝佳的板子有个问题,就是他会产生被迫的匹配,瞎起的名字,注意有这样的原本不存在的边,就说明无解。再次熟悉一下顶标。太久没写了~~~~

而是费用流:MCMF

就是中间cap = c,有无解就是看流量是否为 n ,是的,就是最小费用。

#include 
using namespace std;const int maxn = 100;const int inf = 1<<30;int W[maxn][maxn],n;int Lx[maxn],Ly[maxn]; ///顶标int lefts[maxn]; ///left[i] 为右边第 i 个点的标号bool S[maxn],T[maxn]; ///S,T左右第 i 个点是否标记bool match(int i) { S[i] = true; for(int j = 1; j <= n; j++) if(Lx[i]+Ly[j]==W[i][j]&&!T[j]) { T[j] = true; if(!lefts[j]||match(lefts[j])) { lefts[j] = i; return true; } } return false;}void update() { int a = 1<<30; for(int i = 1; i <= n; i++) if(S[i]) for(int j = 1; j <= n; j++) if(!T[j]) a = min(a,Lx[i]+Ly[j]-W[i][j]); for(int i = 1; i <= n; i++) { if(S[i]) Lx[i]-=a; if(T[i]) Ly[i]+=a; }}void KM() { for(int i = 1; i <= n; i++) { lefts[i] = Lx[i] = Ly[i] = 0; for(int j = 1; j <= n; j++) Lx[i] = max(Lx[i],W[i][j]); } for(int i=1;i<=n;i++) { for(;;) { for(int j=1;j<=n;j++) S[j] = T[j] = 0; if(match(i)) break; else update(); } }}int main(){ //freopen("in.txt","r",stdin); while(scanf("%d",&n),n) { for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) W[i][j] = -inf; memchr(W,-inf,sizeof(W)); for(int u = 1; u <= n ; u++) { int v,c; while(scanf("%d",&v),v) { scanf("%d",&c); W[u][v] = max(W[u][v],-c); } } KM(); bool flag = true; int ans = 0; for(int j = 1; j <= n; j++) { int i = lefts[j]; if(W[i][j]==-inf) { flag = false; break; } ans+= -W[i][j]; } if(flag==false) puts("N"); else printf("%d\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/TreeDream/p/8376599.html

你可能感兴趣的文章
CactiFans V1.0中文版发布
查看>>
HTML如何显示小于号“<”等特殊符号?
查看>>
别伤了虚拟桌面管理员的"心"
查看>>
Windows系统使用IntelliJ IDEA 搭建Hadoop的开发调试环境(一)
查看>>
yum安装lamp
查看>>
Web.Config文件中数据库连接配置
查看>>
[Unity 3D] Unity 3D 性能优化 (一)
查看>>
spring Quartz定时任务调度 时间设置
查看>>
SymmetricDS: 数据库数据同步Database synchronization
查看>>
Disabling OOM killer on Ubuntu 14.04
查看>>
VBS备份脚本
查看>>
CentOS 6.5 自动安装镜像
查看>>
Storm与Spark Streaming比较
查看>>
我的友情链接
查看>>
Exchange Server 运维管理01:Exchange中Active Directory 有什么用?
查看>>
dhcp服务在企业中的应用
查看>>
linux系统管理之四:服务状态
查看>>
VMware View FAQ[一]
查看>>
【原创翻译】布尔值(boolean)
查看>>
三元运算式、lambda表达式、内置函数map、reduce、filter以及yield生成器
查看>>