HDU 3488
http://acm.hdu.edu.cn/showproblem.php?pid=3488
原来写过的一道题,今天重新看费用流又做了一遍
题意:给一个图,求环的并(权值和最小)
思路:每个点只能走一次,且都要走,所以一个点的出度入度均为1,因此拆点建图跑二分图最优匹配
用费用流写的,速度比km慢
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <queue>
- using namespace std ;
- const int INF=0xfffffff ;
- struct node{
- int s,t,cap,cost,nxt ;
- }e[] ;
- int sumflow ;
- int n,m,cnt,head[],vis[],dis[],pre[] ;
- void add(int s,int t,int cap,int cost)
- {
- e[cnt].s=s ;e[cnt].t=t ;e[cnt].cap=cap ;e[cnt].cost=cost ;e[cnt].nxt=head[s] ;head[s]=cnt++ ;
- e[cnt].s=t ;e[cnt].t=s ;e[cnt].cap= ;e[cnt].cost=-cost ;e[cnt].nxt=head[t] ;head[t]=cnt++ ;
- }
- int spfa(int s,int t,int N)
- {
- for(int i= ;i<=N ;i++)
- dis[i]=INF ;
- dis[s]= ;
- memset(vis,,sizeof(vis)) ;
- memset(pre,-,sizeof(pre)) ;
- vis[s]= ;
- queue <int> q ;
- q.push(s) ;
- while(!q.empty())
- {
- int u=q.front() ;
- q.pop() ;
- vis[u]= ;
- for(int i=head[u] ;i!=- ;i=e[i].nxt)
- {
- int tt=e[i].t ;
- if(e[i].cap && dis[tt]>dis[u]+e[i].cost)
- {
- dis[tt]=dis[u]+e[i].cost ;
- pre[tt]=i ;
- if(!vis[tt])
- {
- vis[tt]= ;
- q.push(tt) ;
- }
- }
- }
- }
- if(dis[t]==INF)return ;
- return ;
- }
- int MCMF(int s,int t,int N)
- {
- int flow,minflow,mincost ;
- mincost=flow= ;
- while(spfa(s,t,N))
- {
- minflow=INF ;
- for(int i=pre[t] ;i!=- ;i=pre[e[i].s])
- minflow=min(minflow,e[i].cap) ;
- flow+=minflow ;
- for(int i=pre[t] ;i!=- ;i=pre[e[i].s])
- {
- e[i].cap-=minflow ;
- e[i^].cap+=minflow ;
- }
- mincost+=dis[t]*minflow ;
- }
- sumflow=flow ;//最大流
- return mincost ;
- }
- int main()
- {
- int t ;
- scanf("%d",&t) ;
- while(t--)
- {
- cnt= ;
- memset(head,-,sizeof(head)) ;
- scanf("%d%d",&n,&m) ;
- int ss= ;
- int st=*n+ ;
- for(int i= ;i<m ;i++)
- {
- int s,t,v ;
- scanf("%d%d%d",&s,&t,&v) ;
- add(s,t+n,,v) ;
- }
- for(int i= ;i<=n ;i++)
- add(,i,,) ;
- for(int i=n+ ;i<=*n ;i++)
- add(i,st,,) ;
- int ans=MCMF(ss,st,st+) ;
- printf("%d\n",ans) ;
- }
- return ;
- }
HDU 3488的更多相关文章
- Hdu 3488 Tour (KM 有向环覆盖)
题目链接: Hdu 3488 Tour 题目描述: 有n个节点,m条有权单向路,要求用一个或者多个环覆盖所有的节点.每个节点只能出现在一个环中,每个环中至少有两个节点.问最小边权花费为多少? 解题思路 ...
- hdu 3488 Tour
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意:给你一个N个顶点M条边的带权有向图,要你把该图分成1个或多个不相交的有向环.且所有定点都只 ...
- Tour HDU - 3488 有向环最小权值覆盖 费用流
http://acm.hdu.edu.cn/showproblem.php?pid=3488 给一个无源汇的,带有边权的有向图 让你找出一个最小的哈密顿回路 可以用KM算法写,但是费用流也行 思路 1 ...
- HDU 3488 Tour(最小费用流:有向环最小权值覆盖)
http://acm.hdu.edu.cn/showproblem.php?pid=3488 题意: 给出n个点和m条边,每条边有距离,把这n个点分成1个或多个环,且每个点只能在一个环中,保证有解. ...
- hdu 3488(KM算法||最小费用最大流)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- 图论(二分图,KM算法):HDU 3488 Tour
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- Q - Tour - hdu 3488(最小匹配值)
题意:一个王国有N个城市,M条路,都是有向的,现在可以去旅游,不过走的路只能是环(至少也需要有两个城市),他们保证这些城市之间的路径都是有环构成的,现在至少需要走多少路. 分析:因为是有向图所以,而且 ...
- HDU 3488 Tour (最大权完美匹配)【KM算法】
<题目链接> 题目大意:给出n个点m条单向边边以及经过每条边的费用,让你求出走过一个哈密顿环(除起点外,每个点只能走一次)的最小费用.题目保证至少存在一个环满足条件. 解题分析: 因为要求 ...
- Tour HDU - 3488(最大权值匹配)
Tour In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one- ...
随机推荐
- Codeforces Round #303 (Div. 2)E. Paths and Trees 最短路
E. Paths and Trees time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- sqlserver 存入DB中的中文乱码
在war包中的appliation.properties中,配置的数据库连接做了修改,也不知道当初为什么这么改 导致存入DB中的中文是??? testaaa.jdbc.type=mssqltestaa ...
- BeyondCompare
BeyondCompare可对文本,照片,文件夹,注册表等等进行比较 在git看不清楚版本和改动项的时候,直接将生产上的包拉下来和即将发布的包,作对比.
- preg_match
$baseUrl = request()->baseUrl(); if (!preg_match('/admin.php/',$baseUrl)) { $this->redirect('/ ...
- Python day7_set集合的常用方法以及常用格式化的总结
1.集合的定义:集合是无序的,没有重合元素的集合 集合外使用{}符号,各元素用,连接 2.集合的常用方法 1.add增加元素 2.clear清除元素 3.copy浅拷贝 4.difference差集( ...
- 《Blue_Flke》 团队项目用户验收评审
一.beta冲刺 beta冲刺第一.二天:https://www.cnblogs.com/ruanjgc/p/9226434.html beta冲刺第三天:https://www.cnblogs.co ...
- 会话技术及jsp概述
一.会话技术 1.概念:在一次会话中共享数据,在web中指,浏览器和服务器的一次通信.包含多次请求,和多次响应. 可以在一次会话的多次请求中共享数据. 2.客户端会话技术:Cookie 将数据保存在客 ...
- Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)
Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...
- android--------WebView实现 Html5 视频标签加载
自Android 4.4起,Android中的WebView开始基于Chromium(谷歌浏览器)支持浏览器的一系列功能,webkit解析网页各个节点,这个改变,使得WebView的性能大幅度提升,并 ...
- C++&C#外挂(内存修改)
大学时候因为主修C#语言(当然现在做的是javaweb开发),那时在网上学了用C#做外挂的教程,外挂嘛,大家都懂的.这里只是低级的修改内存,不涉及到截获数据包.如果是欺骗服务器,修改服务器数据,那就难 ...