UVA 1349 Optimal Bus Route Design (二分图最小权完美匹配)
恰好属于一个圈,那等价与每个点有唯一的前驱和后继,这让人想到了二分图,
把一个点拆开,点的前驱作为S集和点的后继作为T集,然后连边,跑二分图最小权完美匹配。
写的费用流。。最大权完美匹配KM算法没看懂
#include<bits/stdc++.h>
using namespace std; const int maxn = +;
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()-;
} void AddEdge(int u,int v,int C,int c)
{
addEdge(u,v,C,c);
addEdge(v,u,,-c);
}
typedef int ll;
int S = ,T = ,vcnt;
int d[maxn],p[maxn],a[maxn];
bool vis[maxn];
const int INF = 0x3f3f3f3f; ll MCMF(ll &cost)
{
cost = ;
ll flow = ;
while(true){
memset(vis,,sizeof(bool)*vcnt);
memset(d,0x3f,sizeof(int)*vcnt);
queue<int> q;
q.push(S); d[S] = ; 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]^].v){
edges[p[i]].cap -= a[T];
edges[p[i]^].cap += a[T];
}
}
return -;
} void init()
{
memset(head,-,sizeof(int)*vcnt);
edges.clear();
} int main()
{
//freopen("in.txt","r",stdin);
int n;
S = ;
while(scanf("%d",&n),n){
vcnt = *n+;
init(); T = *n+;
for(int i = ; i <= n; i++){
AddEdge(S,i,,);
AddEdge(i+n,T,,);
}
for(int i = ; i <= n; i++){
int v,c;
while(scanf("%d",&v),v){
scanf("%d",&c);
AddEdge(i,v+n,,c);
}
}
int cost;
int flow = MCMF(cost);
if(flow<n) puts("N");
else printf("%d\n",cost);
}
return ;
}
UVA 1349 Optimal Bus Route Design (二分图最小权完美匹配)的更多相关文章
- UVa 1349 - Optimal Bus Route Design(二分图最佳完美匹配)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 1349 Optimal Bus Route Design (最佳完美匹配)
题意:给定一个有向图,让你找出若干个图,使得每个点恰好属于一个圈,并且总的权和最小. 析:每个点都有唯一的一个圈,也就是说每一点都有唯一的后继,那么我们就可以转换成求一个图的最小权的最佳完全匹配,可以 ...
- UVA 1349 Optimal Bus Route Design 最优公交路线(最小费用流,拆点)
题意: 给若干景点,每个景点有若干单向边到达其他景点,要求规划一下公交路线,使得每个景点有车可达,并且每个景点只能有1车经过1次,公车必须走环形回到出发点(出发点走2次).问是否存在这样的线路?若存在 ...
- UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
题意: 给出一个有向带权图,找到若干个圈,使得每个点恰好属于一个圈.而且这些圈所有边的权值之和最小. 分析: 每个点恰好属于一个有向圈 就等价于 每个点都有唯一后继. 所以把每个点i拆成两个点,Xi ...
- 紫书 例题11-10 UVa 1349 (二分图最小权完美匹配)
二分图网络流做法 (1)最大基数匹配.源点到每一个X节点连一条容量为1的弧, 每一个Y节点连一条容量为1的弧, 然后每条有向 边连一条弧, 容量为1, 然后跑一遍最大流即可, 最大流即是最大匹配对数 ...
- UVA - 1349 D - Optimal Bus Route Design
4. D - Optimal Bus Route Design 题意:给出n(n<=100)个点的带权有向图,找出若干个有向圈,每个点恰好属于一个有向圈.要求权和尽量小. 注意即使(u,v)和( ...
- UVa1349 Optimal Bus Route Design(二分图最佳完美匹配)
UVA - 1349 Optimal Bus Route Design Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...
- UVA1349 Optimal Bus Route Design 拆点法+最小费用最佳匹配
/** 题目:UVA1349 Optimal Bus Route Design 链接:https://vjudge.net/problem/UVA-1349 题意:lrj入门经典P375 给n个点(n ...
- POJ 2404 Jogging Trails(最小权完美匹配)
[题目链接] http://poj.org/problem?id=2404 [题目大意] 给出一张图,求走遍所有的路径至少一次,并且回到出发点所需要走的最短路程 [题解] 如果图中所有点为偶点,那么一 ...
随机推荐
- Httpclient入门代码
/** * Project Name:httpClient * File Name:Test.java * Package Name:httpClient * Date:2017年11月9日上午8:3 ...
- HDU4248【DP】
题意: 有n种石头,每种石头有a[i]个,然后让你去组合,问有多少种组合: 思路: 这种题,排列组合知识一上,非常麻烦,已经搞了好几题,看似就是排列组合的姿势,然而最终都是一种递推,也就是DP,而且比 ...
- 《C#入门经典》学习笔记(集合、比较和转换)
http://xiang-ai-2002.blog.163.com/blog/static/8477933201041824429161/ 集合 C#中的数组是作为System.Array类的实例来执 ...
- 3DMAX 4角色蒙皮
1 角色建模 略,以后补充 2 骨骼绑定 一般不用骨骼直接拉,Biped足够,以后适当补充骨骼直接拉的操作 1 将Biped骨骼和模型对齐 1 创建biped之后,第一步一要先选择,然后再对位骨骼到模 ...
- 洛谷P4238 【模板】多项式求逆(NTT)
传送门 学习了一下大佬的->这里 已知多项式$A(x)$,若存在$A(x)B(x)\equiv 1\pmod{x^n}$ 则称$B(x)$为$A(x)$在模$x^n$下的逆元,记做$A^{-1} ...
- [Xcode 实际操作]一、博主领进门-(1)iOS项目的创建和项目模板的介绍
目录:[Swift]Xcode实际操作 本文将演示iOS项目的创建和项目模板的介绍. [Create a new Xcode project]创建一个新的项目. 在弹出的模板窗口中,显示了所有的项目模 ...
- [原创]内网渗透专用SSH连接工具sshcmd/sshshell/ssh密码破解以及Kali开启SSH
目录 1.Kali开启SSH 2.SSH连接工具优缺点 3.渗透专用SSH连接工具 4.ssh执行cmd源码 5.批量SSH密码破解 6.相关工具下载 0x001 SSH配置 1.打开文件 etc/s ...
- HTTP1.1规范下载由6个文档组成
- android 一些常用权限
<!-- 网络访问权限 --> <uses-permission android:name="android.permission.INTERNET" /> ...
- STP-2-三个选择
1.选择根交换机 2.确定根端口 3.确定指定端口 1.选择根交换机 stp中只有一台交换机能成为根(Root),每台交换机按自己的STP逻辑,先发一个hello称自己为根,如果收到了比自 ...