题目链接:https://cn.vjudge.net/contest/275153#problem/G

具体思路: 我们可以按照暴力的方法进行做 , 我们可以枚举每一条边,将这条边的权值设置为inf,然后再去跑最短路,起点是这条边的起点,如果说这条边的另一个点能够到达,并且总的路径花费小于inf,这就证明了有回路,然后再去从这些回路里面去找最小花费就可以了

AC代码:

#include<bits/stdc++.h>
using namespace std;
# define ll long long
const int maxn = 10000+100;
# define inf 0x3f3f3f3f
const int mod = 1e9;
map<pair<int,int>,int>vis;
int head[maxn],num,dis[maxn];
int ans;
struct node
{
int fr;
int to;
int cost;
int nex;
} edge[maxn];
struct point
{
int v;
int cost;
point() {}
point(int xx,int yy)
{
v=xx;
cost=yy;
}
friend bool operator < (point a,point b)
{
return a.cost>b.cost;
}
};
void init()
{
vis.clear();
num=0;
memset(head,-1,sizeof(head));
ans=inf;
}
void addedge(int fr,int to,int cost)
{
edge[num].to=to;
edge[num].fr=fr;
edge[num].nex=head[fr];
edge[num].cost=cost;
head[fr]=num++;
}
void krustra(int fr,int cost)
{
memset(dis,inf,sizeof(dis));
priority_queue<point>q;
dis[fr]=0;
q.push(point(fr,0));
while(!q.empty())
{
point tmp=q.top();
q.pop();
if(tmp.cost>ans)continue;
if(dis[tmp.v]+cost>ans)break;
for(int i=head[tmp.v]; i!=-1; i=edge[i].nex)
{
int u=edge[i].to;
if(dis[u]>dis[tmp.v]+edge[i].cost)
{
dis[u]=dis[tmp.v]+edge[i].cost;
q.push(point(u,dis[u]));
}
}
}
}
int main()
{
int T;
scanf("%d",&T);
int Case=0;
while(T--)
{
int n;
init();
scanf("%d",&n);
int x1,y1,x2,y2,d;
int dfn=0;
for(int i=1; i<=n; i++)
{
scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&d);
if(vis[make_pair(x1,y1)]==0)
{
vis[make_pair(x1,y1)]=++dfn;
}
if(vis[make_pair(x2,y2)]==0)
{
vis[make_pair(x2,y2)]=++dfn;
}
addedge(vis[make_pair(x2,y2)],vis[make_pair(x1,y1)],d);
addedge(vis[make_pair(x1,y1)],vis[make_pair(x2,y2)],d);
}
for(int i=0; i<num; i+=2)
{
int tmp=edge[i].cost;
edge[i].cost=inf;
edge[i+1].cost=inf;//注意这是双向边,所以需要将相邻的两条边的权值都设置为inf
krustra(edge[i].fr,tmp);
ans=min(ans,dis[edge[i].to]+tmp);
edge[i].cost=tmp;
edge[i+1].cost=tmp;
}
printf("Case #%d: ",++Case);
if(ans==inf)printf("%d\n",0);
else printf("%d\n",ans);
}
return 0;
}

G - Pandaland HDU - 6005 (找最小环)的更多相关文章

  1. G - Queue HDU - 5493 线段树+二分

    G - Queue HDU - 5493 题目大意:给你n个人的身高和这个人前面或者后面有多少个比他高的人,让你还原这个序列,按字典序输出. 题解: 首先按高度排序. 设每个人在其前面有k个人,设比这 ...

  2. 拓扑_dfs——找最小环

    今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹). 这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话 ...

  3. G - Game HDU - 5242 (数链剖分)

    题目链接: G - Game HDU - 5242 题目大意:首先是T组测试样例,给出一颗以1节点为根的树,每个节点有各自的价值,有m次从根节点出发向下走到叶子节点的机会,每次会得到所有经过节点的权值 ...

  4. HDU 6005 Pandaland (Dijkstra)

    题意:给定一个图,找出一个最小环. 析:暴力枚举每一条,然后把边设置为最大值,以后就不用改回来了,然后跑一遍最短路,跑 n 次就好. 代码如下: #pragma comment(linker, &qu ...

  5. 【HDU 6005】Pandaland(Dijkstra)

    Problem Description Mr. Panda lives in Pandaland. There are many cities in Pandaland. Each city can ...

  6. HDU 1028 整数拆分 HDU 2082 找单词 母函数

    生成函数(母函数) 母函数又称生成函数.定义是给出序列:a0,a1,a2,...ak,...an, 那么函数G(x)=a0+a1*x+a2*x2+....+ak*xk +...+an* xn  称为序 ...

  7. hdu 5051 找规律?+大trick

    http://acm.hdu.edu.cn/showproblem.php?pid=5051 打表找规律 据说是http://zh.wikipedia.org/wiki/%E6%9C%AC%E7%A6 ...

  8. HDU 2082 找单词 (普通母函数)

    题目链接 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于 ...

  9. hdu 5247 找连续数(思维)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5247 找连续数 Time Limit: 2000/1000 MS (Java/Others)    M ...

随机推荐

  1. js 时间处理函数 (判断今天是否在一段时间内)

    var curTime = new Date(); //2把字符串格式转换为日期类 var startTime = new Date(Date.parse("2018-3-28 16:44& ...

  2. Spring Boot快速搭建Spring框架

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development a ...

  3. 深入理解JAVA虚拟机阅读笔记4——虚拟机类加载机制

    虚拟机把描述类的Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 在Java语言中,类型的加载.连接和初始化过程都是 ...

  4. iOS 数组和字典排序

    一.数组排序 数组排序方式1: //初始化可变数组 NSMutableArray *arr1=[NSMutableArray arrayWithObjects:@"giu",@&q ...

  5. 【uoj#142】【UER #5】万圣节的南瓜灯 乱搞+并查集

    题目描述 给出一张 $n\times m$ 的网格图,两个格子之间有一条双向边,当且仅当它们相邻,即在网格图中有一条公共边. 特殊地,对于 $1\le x\le n​$ ,$(x,1)​$ 和 $(x ...

  6. Python 自动补全(vim)

    一.vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.p ...

  7. vs2013 查找进行的过程中被停止

    VS"Find in Files"失效的解决方法一:让VS窗口获得焦点,依次按以下快捷键Ctrl+BreakCtrl+Scroll LockAlt+Break VS"Fi ...

  8. CF1009F Dominant Indices 解题报告

    CF1009F Dominant Indices 题意简述 给出一颗以\(1\)为跟的有根树,定义\(d_{i,j}\)为以\(i\)为根节点的子树中到\(i\)的距离恰好为\(j\)的点的个数,对每 ...

  9. shell 中的操作符

    1.算术操作符 2.关系操作符 3.布尔操作符 4.字符串操作符 5.文件相关操作符 算术操作符 bash shell 没有提供任何机制来执行简单的算术运算,不过我们可以借助于一些其他程序,如 exp ...

  10. mac 必备工具

    iTerm 可以在一个窗口中垂直.水平分割窗口,而不用切换来切换去 一些基本功能如下: 1.分窗口操作:shift+command+d(横向)command+d(竖向) 2.查找和粘贴:command ...