G - Pandaland HDU - 6005 (找最小环)
题目链接: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 (找最小环)的更多相关文章
- G - Queue HDU - 5493 线段树+二分
G - Queue HDU - 5493 题目大意:给你n个人的身高和这个人前面或者后面有多少个比他高的人,让你还原这个序列,按字典序输出. 题解: 首先按高度排序. 设每个人在其前面有k个人,设比这 ...
- 拓扑_dfs——找最小环
今天在题库发现了一个wa了很久还没调过的题,这个题呢是2015年noip的day1t2,莫名感觉难度上升(其实水的一匹). 这道题输出是3,其实就是一个图中让你找最小环,尽管我不会找环,但是要是我的话 ...
- G - Game HDU - 5242 (数链剖分)
题目链接: G - Game HDU - 5242 题目大意:首先是T组测试样例,给出一颗以1节点为根的树,每个节点有各自的价值,有m次从根节点出发向下走到叶子节点的机会,每次会得到所有经过节点的权值 ...
- HDU 6005 Pandaland (Dijkstra)
题意:给定一个图,找出一个最小环. 析:暴力枚举每一条,然后把边设置为最大值,以后就不用改回来了,然后跑一遍最短路,跑 n 次就好. 代码如下: #pragma comment(linker, &qu ...
- 【HDU 6005】Pandaland(Dijkstra)
Problem Description Mr. Panda lives in Pandaland. There are many cities in Pandaland. Each city can ...
- HDU 1028 整数拆分 HDU 2082 找单词 母函数
生成函数(母函数) 母函数又称生成函数.定义是给出序列:a0,a1,a2,...ak,...an, 那么函数G(x)=a0+a1*x+a2*x2+....+ak*xk +...+an* xn 称为序 ...
- hdu 5051 找规律?+大trick
http://acm.hdu.edu.cn/showproblem.php?pid=5051 打表找规律 据说是http://zh.wikipedia.org/wiki/%E6%9C%AC%E7%A6 ...
- HDU 2082 找单词 (普通母函数)
题目链接 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于 ...
- hdu 5247 找连续数(思维)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5247 找连续数 Time Limit: 2000/1000 MS (Java/Others) M ...
随机推荐
- 探秘SpringAop(一)_介绍以及使用详解
常用的编程范式 AOP 是什么 是一种编程方式,不是编程语言 解决特定问题,不能解决所有的问题 OOP的补充,不是代替 AOP 初衷 DRY: Don't repeat yourself(代码重复) ...
- BZOJ5102 POI2018Prawnicy(堆)
考虑固定右端点,使左端点最小.那么按右端点排序后查询前缀这些区间的左端点第k小即可.然而写了一个treap一个线段树都T飞了,感觉惨爆.事实上可以用堆求第k小,维护一个大根堆保证堆中元素不超过k个即可 ...
- Java 信号量 Semaphore 介绍
Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用.Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以 ...
- 【Learning】辛普森积分
辛普森积分 这种积分法很暴力:只要求你实现出函数求值\(f(x)\). 使用辛普森积分,我们可以求出函数一段区间\([l,r]\)的近似积分.记\(mid=\frac{l+r}2\),有: \[ \i ...
- 使用cmstp绕过应用程序白名单
默认情况下,AppLocker允许在文件夹中执行二进制文件,这是可以绕过它的主要原因.已经发现,这样的二进制文件可以很容易地用于绕过AppLocker和UAC.与Microsoft相关的二进制文件之一 ...
- (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
- jquery的serializeArray、param 与serializeArray 的区别与源码解析
jQuery.param( obj, traditional ) 为url查询或者ajax 将对象或者数组转为url参数或ajax参数,是挂在jQuery对象上的静态方法,有码有真相: var myI ...
- 【arc073D】Many Moves
Portal -->arc073D Description 有\(n\)个格子,编号从左到右为\(1\sim n\),一开始有两个棋子,位置给定,接下来要依次进行\(Q\)次操作,第\(i\ ...
- C#线程篇---解答线程之惑(2)
我们都知道,在这个行业,追求的就是用最少的时间学最多的知识,这是我写这个系列最想达到的目标,在最快的时间内,帮助更多的人学习更多的线程知识. 前一篇,讲述了线程基础,给大家铺垫了一个基础,这一篇着重介 ...
- linux命令总结之dig命令
Dig简介: Dig是一个在类Unix命令行模式下查询DNS包括NS记录,A记录,MX记录等相关信息的工具.Dig的源码是ISC BIND大包的一部分,但是大多编译和安装Bind的文档都不把它包括在内 ...