hdu6005找带权最小环
题意:给你点和边,让你找最小环的权值,其权值是所有边权的和,没环输出-1。
解法:枚举每一条边,找到其端点,做最短路。、
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
using namespace std;
const int N=8e3+;
const int INF=0x3f3f3f3f;
int head[N],tot,dis[N],ans;
pair<int,int>aa,bb;
map<pair<int,int>,int>mp;
bool vis[N];
struct node
{
int u,to,next,w;
} e[N*N];
void add(int u,int v,int w)
{
e[tot].u=u;
e[tot].to=v;
e[tot].next=head[u];
e[tot].w=w;
head[u]=tot++;
}
struct ct
{
int w,id;
bool operator < (const ct &A)const
{
return w>A.w;
}
};
int dij(int s,int t,int ban)
{
memset(dis,INF,sizeof(dis));
memset(vis,,sizeof(vis));
priority_queue<ct>Q;
dis[s]=;
ct q,p;
q.w=,q.id=s;
Q.push(q);
while(!Q.empty())
{
q=Q.top();
Q.pop();
int u=q.id;
if(q.w>=ans) return -;
if(vis[u]) continue;
if(u==t) return q.w;
vis[u]=;
for(int i=head[u]; ~i; i=e[i].next)
{
if(i==ban||(i^)==ban) continue;
int v=e[i].to;
if(dis[v]>dis[u]+e[i].w)
{
dis[v]=dis[u]+e[i].w;
p.w=dis[v],p.id=v;
Q.push(p);
}
}
}
return -;
}
int main()
{
int T,tas=;
for(scanf("%d",&T); T--;)
{
int n,x,now=;
memset(head,-,sizeof(head));
tot=;
scanf("%d",&n);
mp.clear();
for(int i=; i<=n; ++i)
{
scanf("%d%d%d%d%d",&aa.first,&aa.second,&bb.first,&bb.second,&x);
if(!mp[aa]) mp[aa]=++now;
if(!mp[bb]) mp[bb]=++now;
add(mp[aa],mp[bb],x);
add(mp[bb],mp[aa],x);
}
ans=;
for(int i=; i<tot; i+=)
{
int w,u=e[i].u,v=e[i].to;
w=dij(u,v,i);
if(w!=-) ans=min(ans,w+e[i].w);
}
if(ans==) ans=;
printf("Case #%d: %d\n",tas++,ans);
}
}
hdu6005找带权最小环的更多相关文章
- 带权图的最短路径算法(Dijkstra)实现
一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...
- POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
下面的是从该网站上copy过来的,稍微改了一点,给出链接:http://hi.baidu.com/nondes/item/26dd0f1a02b1e0ef5f53b1c7 题意:有N个人玩剪刀石头布, ...
- 【带权并查集】【HDU3038】【How Many Answers Are Wrong】d s
这个题看了2天!!!最后看到这篇题解才有所明悟 转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4298091.html ---by 墨染之樱 ...
- DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)
前缀和优化 当DP过程中需要反复从一个求和式转移的话,可以先把它预处理一下.运算一般都要满足可减性. 比较naive就不展开了. 题目 [Todo]洛谷P2513 [HAOI2009]逆序对数列 [D ...
- 无向带权图的最小生成树算法——Prim及Kruskal算法思路
边赋以权值的图称为网或带权图,带权图的生成树也是带权的,生成树T各边的权值总和称为该树的权. 最小生成树(MST):权值最小的生成树. 生成树和最小生成树的应用:要连通n个城市需要n-1条边线路.可以 ...
- poj1417(带权并查集+背包DP+路径回溯)
题目链接:http://poj.org/problem;jsessionid=8C1721AF1C7E94E125535692CDB6216C?id=1417 题意:有p1个天使,p2个恶魔,天使只说 ...
- 某种带权有向无环图(graph)的所有路径的求法
// 讨论QQ群:135202158 最近做某个东西,最后用图实现了,这里总结一下算法. 假设有以下带权有向无环图(连通或非连通,我这里用的是非连通的): 每个节点(node)可能与其他节点有向地相连 ...
- POJ - 2912 Rochambeau (带权并查集+枚举)
题意:有N个人被分为了三组,其中有一个人是开了挂的.同组的人的关系是‘=’,不同组的人关系是‘<’或'>',但是开了挂的人可以给出自己和他人任意的关系.现在要根据M条关系找出这个开了挂的人 ...
- poj1182 食物链 带权并查集
题目传送门 题目大意:大家都懂. 思路: 今天给实验室的学弟学妹们讲的带权并查集,本来不想细讲的,但是被学弟学妹们的态度感动了,所以写了一下这个博客,思想在今天白天已经讲过了,所以直接上代码. 首先, ...
随机推荐
- swift 3.0字符串的简单使用
let str:String = "12314124" 获取某个指定位置的元素 print(str.characters[str.index(str.startIndex, off ...
- ES6中Fetch的封装及使用,炒鸡简单~
之前写过一篇<ajax.axios.fetch之间的详细区别以及优缺点> 戳这里 1.封装 (http.js) class Ajax { get(url) { return new Pro ...
- python实现二分叉查找
*二分叉查找就是折半查找 比如12345这几个数字当中找2,他会先找到这五个数字中的中坚的那个与2进行比较,比如中间的3>2他就认为3以后的不用查找了,然后查找3左边的,即123,再把这个分半, ...
- HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- 关于RMQ问题的四种解法
什么是RMQ问题: RMQ (Range Minimum/Maximum Query):对于长度为n的数组A,回答若干询问RMQ(A,i,j)(i,j<=n-1),返回数组A中下标在i, ...
- 使用docker搭建自己的博客(一)
购买服务器 首先服务器选择腾讯云学生服务器,25岁以下实名认证后月租10块,还是很适合我这种简约派的 又财大气粗买了个一年的域名,后面涨价再说吧 安装docker 使用xshell连上服务器 安装必要 ...
- 域名系统(DNS)初探
1.定义 域名:又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称(如mail.cctv.com),用于在数据传输时对计算机的定位标识(有时也指地理位置): 域名系统 ...
- pytest文档38-allure.setp添加测试用例步骤
前言 一般流程性的测试用例,写成自动化用例时,步骤较多写起来会比较长.在测试用例里面添加详细的步骤有助于更好的阅读,也方便报错后快速的定位到问题. 举个常见的测试场景用例:从登陆开始,到浏览商品添加购 ...
- 王颖奇 20171010129《面向对象程序设计(java)》第十三周学习总结
实验十三 图形界面事件处理技术 实验时间 2018-11-22 1.实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机制: (3) 掌握事件处理的基 ...
- 【HBase】HBase和Sqoop整合
目录 需求一 步骤 一.修改sqoop配置文件 二.在mysql中创建数据库和数据表并插入数据 三.将mysql表中的数据导入到HBase表中 四.在HBase表中查看数据 需求二 步骤 一.创建hi ...