hdoj--3488--Tour(KM)
Tour
contain one or more loops. (A loop is a route like: A->B->……->P->A.)
Every city should be just in one route.
A loop should have at least two cities. In one route, each city should be visited just once. (The only exception is that the first and the last city should be the same and this city is visited twice.)
The total distance the N roads you have chosen should be minimized.
In each test case, the first line contains two integers N and M, indicating the number of the cities and the one-way roads. Then M lines followed, each line has three integers U, V and W (0 < W <= 10000), indicating that there is a road from U to V, with the
distance of W.
It is guaranteed that at least one valid arrangement of the tour is existed.
A blank line is followed after each test case.
1
6 9
1 2 5
2 3 5
3 1 10
3 4 12
4 1 8
4 6 11
5 4 7
5 6 9
6 5 4
42
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
int map[210][210];
int slock[210];
int lx[210],ly[210];
bool visx[210],visy[210];
int nx,ny,match[210];
void getmap()
{
scanf("%d%d",&n,&m);
nx=ny=n;
for(int i=1;i<=nx;i++)
for(int j=1;j<=ny;j++)
map[i][j]=-INF;
int x,y,w;
for(int i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&w);
if(-w>map[x][y])
map[x][y]=-w;
}
}
int DFS(int x)
{
visx[x]=true;
for(int y=1;y<=ny;y++)
{
if(visy[y]) continue;
int t=lx[x]+ly[y]-map[x][y];
if(t==0)
{
visy[y]=true;
if(match[y]==-1||DFS(match[y]))
{
match[y]=x;
return 1;
}
}
else if(t<slock[y])
slock[y]=t;
}
return 0;
}
void KM()
{
memset(match,-1,sizeof(match));
memset(ly,0,sizeof(ly));
for(int x=1;x<=nx;x++)
{
lx[x]=-INF;
for(int y=1;y<=ny;y++)
lx[x]=max(lx[x],map[x][y]);
}
for(int x=1;x<=nx;x++)
{
for(int y=1;y<=ny;y++)
slock[y]=INF;
while(1)
{
memset(visx,false,sizeof(visx));
memset(visy,false,sizeof(visy));
if(DFS(x)) break;
int d=INF;
for(int i=1;i<=ny;i++)
{
if(!visy[i]&&slock[i]<d)
d=slock[i];
}
for(int i=1;i<=nx;i++)
{
if(visx[i])
lx[i]-=d;
}
for(int i=1;i<=ny;i++)
{
if(visy[i])
ly[i]+=d;
else
slock[i]-=d;
}
}
}
int ans = 0;
for(int i = 1;i <= ny; i++)
ans += map[match[i]][i];
printf("%d\n",-ans);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
getmap();
KM();
}
return 0;
}
hdoj--3488--Tour(KM)的更多相关文章
- HDU - 3488 Tour (KM最优匹配)
题意:对一个带权有向图,将所有点纳入一个或多个环中,且每个点只出现一次,求其所有环的路径之和最小值. 分析:每个点都只出现一次,那么换个思路想,每个点入度出度都为1.将一个点拆成两个点,一个作为入度点 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- hdoj 3488 Tour 【最小费用最大流】【KM算法】
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submi ...
- HDU 3488 Tour(最小费用流:有向环最小权值覆盖)
http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意: 给出n个点和m条边,每条边有距离,把这n个点分成1个或多个环,且每个点只能在一个环中,保证有解. ...
- HDU3488:Tour(KM算法)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- 【UVA 1411】 Ants (KM)
Young naturalist Bill studies ants in school. His ants feed onplant-louses that live on apple trees. ...
- 【HDU 2853】Assignment (KM)
Assignment Problem Description Last year a terrible earthquake attacked Sichuan province. About 300, ...
- 奔小康赚大钱(km)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU ACM 1224 Free DIY Tour (SPFA)
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
随机推荐
- SQLServer2008 将“单个用户”改为“多用户”
一开始是要想要分离掉数据库,然后将其删除 不知道为什么一直分离不了,试了很多次,又尝试直接删除 结果数据库突然显示成了“单个用户” 尝试查看其属性,或者“新建查询”也都报错,提示已经有其他用户建立了连 ...
- CSS框架Bootstrap
作为一个软件开发人员,经常接触和使用框架是再平常的事情不过了.但是这些框架基本都是和语言相关的,比如WEB框架SpringMVC,JavaEE框架Spring,ORM框架Hibernate,还有Jav ...
- 如何在编辑器打开Java程序
我们都知道运行JAVA文件,可以从软件控制台运行我们写好的java文件,也可以从windows窗口运行,我们最开始接触的是通过windows窗口来运行java文件,下面简单介绍一下如何如何在编辑器打开 ...
- python2打印list中文内容防乱码
zh_ls = ['人','民'] print str(zh_ls).decode("string_escape")
- AI:IPPR的数学表示-CNN结构进化(Alex、ZF、Inception、Res、InceptionRes)
前言: 文章:CNN的结构分析-------: 文章:历年ImageNet冠军模型网络结构解析-------: 文章:GoogleLeNet系列解读-------: 文章:DNN结构演进Histor ...
- Arduino ULN2009驱动步进电机
一.实物图 二.例子代码 注:代码来自老外 http://www.4tronix.co.uk/arduino/Stepper-Motors.php 功能:控制电机正反转 // This Arduino ...
- 进行https通信时服务器端下发的是一个证书链
进行https通信时服务器端下发的是一个证书链,否则无法验证证书的有效性.
- maven将jar包添加到本地仓库
mvn install:install-file -Dfile=jar包本地路径 -DgroupId=groupID -DartifactId=ifactId -Dversion=版本 -Dpacka ...
- Network-Flow
//Created by pritry int graph[MAX][MAX]; //原图 int source; //起点,这里为0 int sink; //终点,这里为n-1 int e[MAX] ...
- [luogu2329 SCOI2005] 栅栏(二分+搜索)
传送门 Solution 纯搜索80分,加二分90分,再补一个小剪枝满分qwq 真.小剪枝:如果下一个的需求和当前相同,那么不需要再次从头开始试(看代码就明白了233) Code #include & ...