ACM1598并查集方法
find the most comfortable road
但XX星人对时间却没那么多要求。要你找出一条城市间的最舒适的路径。(SARS是双向的)。
第一行有2个正整数n (1<n<=200)和m (m<=1000),表示有N个城市和M条SARS。
接下来的行是三个正整数StartCity,EndCity,speed,表示从表面上看StartCity到EndCity,限速为speedSARS。speed<=1000000
然后是一个正整数Q(Q<11),表示寻路的个数。
接下来Q行每行有2个正整数Start,End, 表示寻路的起终点。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int oo=;
const int N=;
class Coor
{
public:
int s,e,speed;//代表线的起始点和终点
friend bool operator<(Coor a,Coor b)
{
return (a.speed<b.speed);//从小到大排序,这样利用贪心算法比较节省时间
}
};
class Comfort
{
public:
Comfort(int n,int m)//构造函数
{
num=n;
side=m;
p=new int[n+];//临时分配数组空间
edge=new Coor[m+];
}
~Comfort()
{
delete []p;
delete []edge;
} void initp()
{
for(int i=;i<=num;i++)
p[i]=i;
}
void inputedge()
{
for(int i=;i<side;i++)
cin>>edge[i].s>>edge[i].e>>edge[i].speed;
sort(edge,edge+side);//排序
}
int find(int x)
{
if(x==p[x])return x;
return p[x]=find(p[x]);//压缩路径
}
void Union(Coor coor)
{
int fa=find(coor.s);
int fb=find(coor.e);
if(fa!=fb)p[fa]=fb;
}
void Dealpart(int q)//以下代码的作用是判断从起点到终点路径想通的最大值和最小值
//详细解释:首先i从零开始,然后下面的循环J从i 开始,在一轮搜索后,应当找到最大值确定的相通路径,若第一轮找不到必然不相通,下面已经处理这样的问题。
//第一轮能够确定最大值后,开始循环直到确定最小值,当起点i不断的向前推进,当推进到起点和终点不连通的时候算是找到了最小值。
{
while(q--)
{
scanf("%d %d",&start,&end);
less=oo;
for(int i=;i<side;i++)
{
initp();
int temp=oo;
for(int j=i;j<side;j++)
{
Union(edge[j]);//这里每次都连接一个,直到连接到起点终点相通为止,先确定最大值,后确定最小值
int X=find(start);
int Y=find(end);
if(X==Y)
{
temp=edge[j].speed-edge[i].speed;
break;
}
}
if(temp<less)
less=temp;
if(less==)break;//如果less已经为零了就不需要继续循环了,因为没有比他更小的了,节约时间
if(less==oo)break;//如果在第一轮寻找中都没有找到一个确切的值,那么这两个点是不连通的,所以直接退出循环,节约时间
}
if(less==oo)cout<<-<<endl;
else cout<<less<<endl;
}
}
private:
int less;
int *p;
int num,side;
Coor *edge;
int start,end;
};
int main()
{
int n,m,Q;
while(cin>>n>>m)
{
Comfort Object(n,m);
Object.inputedge();
cin>>Q;
Object.Dealpart(Q);
}
return ;
}
ACM1598并查集方法的更多相关文章
- C. Glass Carving (CF Round #296 (Div. 2) STL--set的运用 && 并查集方法)
C. Glass Carving time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 判断图连通的三种方法——dfs,bfs,并查集
Description 如果无向图G每对顶点v和w都有从v到w的路径,那么称无向图G是连通的.现在给定一张无向图,判断它是否是连通的. Input 第一行有2个整数n和m(0 < n,m < ...
- bzoj 1191: [HNOI2006]超级英雄Hero 并查集 || 匈牙利算法
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1804 Solved: 850[Submit][S ...
- Supermarket(贪心/并查集)
题目链接 原创的博客 题意: 超市里有N个商品. 第i个商品必须在保质期(第di天)之前卖掉, 若卖掉可让超市获得pi的利润. 每天只能卖一个商品. 现在你要让超市获得最大的利润. n , p[i], ...
- #C++初学记录(奶酪#并查集)
原题目:牛客网 题目描述 : 现有一块大奶酪,它的高度为 h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞.我们可以在这块奶酪中建立空间坐标系, 在坐标系中,奶酪的下表面为 ...
- JZOJ5966【NOIP2018提高组D2T3】保卫王国(并查集)
题目 还是懒得把题目放上来了. 大意:给你一棵带点权的树,你要花费一些代价选择一些点使得相邻的两个点至少有一个被选. 然后有很多个询问,每个询问强制两个点的状态,问强制了这两个点的状态后的方案. 比赛 ...
- 并查集算法Union-Find的思想、实现以及应用
并查集算法,也叫Union-Find算法,主要用于解决图论中的动态连通性问题. Union-Find算法类 这里直接给出并查集算法类UnionFind.class,如下: /** * Union-Fi ...
- 并查集类的c++封装,比較union_find algorithm四种实现方法之间的性能区别
问题描写叙述: 在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(union-find algorithm ...
- 判断无向图是否有环路的方法 -并查集 -BFS
可以利用并查集或者带颜色标记的BFS(来自算法导论)判断. 首先介绍第一种,用并查集来判断: 首先初始化所有元素的根为-1,-1代表根节点,接下来对于图中的每一条边(v1,v2)都并入集合,并入的方式 ...
随机推荐
- 【CQOI 2007】 余数求和
题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如G(10, 5)=5 ...
- Paper Reading - Convolutional Image Captioning ( CVPR 2018 )
Link of the Paper: https://arxiv.org/abs/1711.09151 Motivation: LSTM units are complex and inherentl ...
- kaldi HMM-GMM全部训练脚本分解
目录 train_mono.sh train_deltas.sh train_lda_mllt.sh train_sat.sh train_mono.sh 单音素训练脚本: //初始化,[topo f ...
- SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出
写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...
- mysql下分组取关联表指定提示方法,类似于mssql中的cross apply
转至:https://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results ...
- Repair the Wall (贪心)
Long time ago , Kitty lived in a small village. The air was fresh and the scenery was very beautiful ...
- Alpha发布文案加美工展示
目录 团队简介 项目进展 组内分工 队员总结 后期计划 一.团队简介 二.项目进展 从选题发布到今天的Alpha发布,我们团队经历了许许多多的磨难.我们最终设计了如下的功能:首页.班级.个人.更多.打 ...
- Java实验二实验报告:java面向对象程序设计
java实验二实验报告 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验 ...
- BluetoothClass详解
一. BluetoothClass简介 1. 继承关系 public final class BluetoothClass extends Object implements Parcelable 该 ...
- 软工实践Alpha冲刺(1/10)
队名:我头发呢队 组长博客 作业博客 张杰(组长) 过去两天完成了哪些任务 查阅Python爬取音源的资料,如 Python3爬虫抓取网易云音乐热评实战 Python爬取高品质QQ音乐(2) 如何爬网 ...