恰好属于一个圈,那等价与每个点有唯一的前驱和后继,这让人想到了二分图,

把一个点拆开,点的前驱作为S集和点的后继作为T集,然后连边,跑二分图最小权完美匹配。

写的费用流。。最大权完美匹配KM算法没看懂

#include<bits/stdc++.h>
using namespace std;const int maxn = 200+6;
struct Edge
{int v,cap,cost,nxt;
};vector<Edge> edges;
#define PB push_back
int head[maxn];void addEdge(int u,int v,int C,int c)
{edges.PB(Edge{v,C,c,head[u]});head[u] = edges.size()-1;
}void AddEdge(int u,int v,int C,int c)
{addEdge(u,v,C,c);addEdge(v,u,0,-c);
}
typedef int ll;
int S = 0,T = 1,vcnt;
int d[maxn],p[maxn],a[maxn];
bool vis[maxn];
const int INF = 0x3f3f3f3f;ll MCMF(ll &cost)
{cost = 0;ll flow = 0;while(true){memset(vis,0,sizeof(bool)*vcnt);memset(d,0x3f,sizeof(int)*vcnt);queue<int> q;q.push(S); d[S] = 0; a[S] = INF;while(q.size()){int u = q.front(); q.pop(); vis[u] = false;for(int i = head[u]; ~i; i = edges[i].nxt){Edge &e = edges[i];if(e.cap && d[e.v] > d[u]+e.cost){d[e.v] = d[u] + e.cost;p[e.v] = i;a[e.v] = min(e.cap,a[u]);if(!vis[e.v]){vis[e.v] = true;q.push(e.v);}}}}if(d[T] == INF) return flow;flow += a[T];cost += a[T]*d[T];for(int i = T; i != S; i = edges[p[i]^1].v){edges[p[i]].cap -= a[T];edges[p[i]^1].cap += a[T];}}return -1;
}void init()
{memset(head,-1,sizeof(int)*vcnt);edges.clear();
}int main()
{//freopen("in.txt","r",stdin);int n;S = 0;while(scanf("%d",&n),n){vcnt = 2*n+2;init(); T = 2*n+1;for(int i = 1; i <= n; i++){AddEdge(S,i,1,0);AddEdge(i+n,T,1,0);}for(int i = 1; i <= n; i++){int v,c;while(scanf("%d",&v),v){scanf("%d",&c);AddEdge(i,v+n,1,c);}}int cost;int flow = MCMF(cost);if(flow<n) puts("N");else printf("%d\n",cost);}return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4760884.html

UVA 1349 Optimal Bus Route Design (二分图最小权完美匹配)相关推荐

  1. UVALive - 3353 Optimal Bus Route Design(二分图最佳匹配)

    题目大意:给出一个n个点的有向带权图,找若干个圈,使得每个节点恰好属于一个圈,要求总长度尽量小 解题思路:首先要在一个圈内,且只能在一个圈内,那么每个点的入度和出度要都为1,所以二分图就有了 接着连边 ...

  2. UVALive 3353 Optimal Bus Route Design

    UVALive 3353 Optimal Bus Route Design 二分图最大完美匹配 题目 题目给出一个带权有向图,找若干个圈,使得每个结点切好属于一个圈,并且所有圈的总长度最小,如果没有满 ...

  3. 【UVALive】 3353 Optimal Bus Route Design 费用流

    传送门:[UVALive]3353 Optimal Bus Route Design 题目大意:给出一个n(n <= 100)个点的有向带权图,找若干个圈,使得每个结点恰好属于一个圈.要求总长度 ...

  4. HDU1533(最小权完美匹配)

    题意:m表示人,H表示房子,一个人只能进一个房子,一个房子也只能进去一个人,房子数等于人数,现在要让所有人进入房子,求所有人都进房子最短的路径. 思路:平时使用都是最大权完美匹配,现在这道题要求最小权 ...

  5. [Floyd 一般图最小权完美匹配] 算法马拉松25 F River?Rever!

    首先把一个区间翻转的最小代价肯定不是题目给出的那个代价 我们先跑一通floyd就能搞出来最小代价 然后呢 把所有奇偶性变化的位置 连成一个完全图 跑最小权完美匹配就好了 不会带花树 拷了个随机匹配的板 ...

  6. Uvalive3353 Optimal Bus Route Design 带权二分图匹配

    题目描述:给出一个有向带权图,现在要求在图中找出若干个环,使得每个点恰好在一个环里,且所有环的距离之和最小,如果不能使每个点恰好在一个环里,输出"N". 思路: 将每个点u拆成u和 ...

  7. UVALive 3353 - Optimal Bus Route Design(二分图最小权匹配)

    题目链接 https://cn.vjudge.net/problem/UVALive-3353 [题意] 给你n个点(n<=100)的有向带权图,你要找到n个有向环,使得每个点恰好属于一个环,要 ...

  8. ZOJ-2342 Roads 二分图最小权值覆盖

    题意:给定N个点,M条边,M >= N-1.已知M条边都有一个权值,已知前N-1边能构成一颗N个节点生成树,现问通过修改这些边的权值使得最小生成树为前N条边的最小改动总和为多少? 分析:由于计算 ...

  9. 利用Kuhn-Munkras算法求最小权值匹配

    本文参考博客: http://blog.csdn.net/zhangpinghao/article/details/12242823(代码参考该博客) http://philoscience.itey ...

最新文章

  1. 【深度学习】煮酒论英雄:深度学习CV领域最瞩目的top成果总结
  2. .net数据源控件绑定mysql_数据源控件与数据绑定控件的进一步简单讨论(1)
  3. 《Non-invasive Fetal ECG Signal Quality Assessment for Multichannel Heart Rate Estimation》论文解读-废弃
  4. 评奖.婚礼及“形而上”
  5. 数据结构 排序 java_Java数据结构之排序---选择排序
  6. 为什么说人类的屁股是个四次元空间?
  7. lnmp安装完之后的一些注意事项
  8. HDU6135 拓展KMP模板
  9. vi-vim (十五):显示与设置选项
  10. 三阶实对称矩阵的秩一分解(快速计算三阶矩阵特征值特征向量的方法)
  11. inode客户端连接成功上不了网_iNode的客户端部分常见问题
  12. 基于PLC的智能化配电箱系统
  13. hdu2122 poj2485 最小生成树
  14. 电影TS/TC/SCR/R5/BD/HD/HC版本意思收集(转)
  15. day23_1-re模块之转义字符、分组、方法
  16. 【技术贴】Pdf压缩利器--PDFshrink使用教程
  17. ip地址占用检测,ping ip地址
  18. 如何导出一篇英文文献的全部参考文献
  19. 运行成功但模拟器上没有程序
  20. 移动架构之MVP框架

热门文章

  1. 判断图像局部过暗_数字图像处理(第五章)
  2. python结果按行输出_python dataframe 输出结果整行显示的方法
  3. vb.net word 自定义工具栏_word重点标记新玩法:应用绘图工具手写笔进行划线涂抹...
  4. 【java】ConcurrentHashMap遍历 --- 弱一致性的迭代器(Iterator)实现原理
  5. 【java】java String 源码
  6. 【ElasticSearch】es 压缩 你的 数据
  7. 【clickhouse】clickhouse 表引擎 之 VersionedCollapsingMergeTree
  8. 【elasticsearch】elasticsearch集群更换节点操作
  9. 【Flink】Flink写入es报错failed to get node info for request_id time out out after
  10. Drools 6.5 :入门程序