刷题总结——做运动(NOIP模拟)
题目:
给定一个无向图,节点数n<=50000,m<=1000000,每条边有两个值t和c,边的长度为t*c···现在要求再t尽量小的情况下,求两节点st的最短距离
题解:
第一次做的时候想都没有想直接用二分+迪杰斯特拉了···哎连复杂度都算不来了···
正解应该是将边按t升序排序后跑kruskals····用并差集判st是否连通··一旦联通将t值小于等于目前枚举的t值的边全部加入建图然后跑最短路就可以了···
其实如果考试时仔细想一想时是可以想到正解的··毕竟如果t要尽量小的话不是二分就是最小生成树了···但并差集判连通性这一点已经很久每用过了··这题算是提了醒吧··
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue< pair<long long,int> >que;
const int N=5e5+;
const int M=1e6+;
inline int R()
{
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar()) f=(f<<)+(f<<)+c-'';
return f;
}
struct node
{
int x,y,T,C;
inline friend bool operator < (node a,node b)
{
return a.T<b.T;
}
}edge[M];
int Father[N],fst[N],go[M*],nxt[M*],n,m,src,des,anst,tot;
long long dis[N],val[M*];
inline bool comb(int a,int b,int c,int d)
{
nxt[++tot]=fst[a],fst[a]=tot,go[tot]=b,val[tot]=(long long)c*d;
nxt[++tot]=fst[b],fst[b]=tot,go[tot]=a,val[tot]=(long long)c*d;
}
inline int get(int a)
{
if(Father[a]==a) return a;
else return Father[a]=get(Father[a]);
}
inline void solve()
{
for(register int i=;i<=n;i++) dis[i]=2e+;
dis[src]=;que.push(make_pair(,src));
while(!que.empty())
{
int u=que.top().second;que.pop();
if(u==des) break;
for(register int e=fst[u];e;e=nxt[e])
{
int v=go[e];
if(dis[v]>dis[u]+val[e])
{
dis[v]=dis[u]+val[e];
que.push(make_pair(-dis[v],v));
}
}
}
}
int main()
{
//freopen("a.in","r",stdin);
n=R();m=R();
for(register int i=;i<=n;i++) Father[i]=i;
for(register int i=;i<=m;i++) edge[i].x=R(),edge[i].y=R(),edge[i].T=R(),edge[i].C=R();
src=R();des=R();
sort(edge+,edge+m+);
for(register int i=;i<=m;i++)
{
int fx=get(edge[i].x),fy=get(edge[i].y);
Father[fx]=fy;
if(get(src)==get(des))
{
anst=edge[i].T;
break;
}
}
cout<<anst<<" ";
for(register int i=;i<=m;i++)
{
if(edge[i].T>anst) break;
comb(edge[i].x,edge[i].y,edge[i].T,edge[i].C);
}
solve();cout<<dis[des]<<endl;
return ;
}
刷题总结——做运动(NOIP模拟)的更多相关文章
- 刷题总结——math(NOIP模拟)
题目: 给定两个数字n,求有多少个数字b满足a^b和b^a同余于2^n,其中n<=30,a<=10^9, 题解: 挺巧妙的一道题···从中深深体会到打表的重要性··· 首先根据ab奇偶性分 ...
- 刷题总结——纸带(NOIP赛前模拟)
题目: 有一个无限长的纸带··上面被划分为若干个格子··现在进行N次操作,第i次操作在L到R上擦出曾经写上的数字(如果有),并写上数字i,询问最终可以看到多少个数字 N小于10^6 题解: 首先毫无疑 ...
- 湾区求职分享:三个月刷题拿到 Google offer,欢迎踊跃提问
本文仅以个人经历和个人观点作为参考.如能受益,不胜荣幸. 本文会不断的修正,更新.希望通过大家的互动最后能写出一份阅者受益的文章. 本文纯手打,会有错别字,欢迎指出,虚心接受及时更改. 小马过河,大牛 ...
- JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动
5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms ...
- [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动
Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...
- 8.22 NOIP 模拟题
8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc fpc 评测环境 位 Linux, .3GHZ CPU ...
- 为了考PMP,我做了一个刷题小程序
一.背景 1.我是一名软件工程师,技术出身,担任开发组长,对项目管理不是很熟,所以决定系统学习下项目管理. 2.全球最适合的项目管理学习课程就是PMP,每年有4次PMP考试,证书还是很有含金量的. 3 ...
- 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划
[NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ...
- noip模拟23[联·赛·题]
\(noip模拟23\;solutions\) 怎么说呢??这个考试考得是非常的惨烈,一共拿了70分,为啥呢 因为我第一题和第三题爆零了,然后第二题拿到了70分,还是贪心的分数 第一题和第二题我调了好 ...
随机推荐
- 【转】NSBundle的使用,注意mainBundle和Custom Bundle的区别
1.[NSBundle mainBundle],文件夹其实是Group,如左侧的树形文件管理器 Build之后,文件直接就复制到了根目录下,于是读取的方法,应该是这样: NSString *earth ...
- HTML之基本语法(段落标签、标题标签、空格标签、换行标签、图片标签和图片的基本属性)
一.HTML标签 所谓的HTML的标签就是发明者认为定义好的一些单词,就相当于我们汉语中的字 二.HTML的语法 语法就是用来定义这些“字”应该如何解析或者书写的规则 三.常见标签及基本语法 1.人为 ...
- 【转】Java8学习笔记(1) -- 从函数式接口说起
http://blog.csdn.net/zxhoo/article/details/38349011 函数式接口 理解Functional Interface(函数式接口,以下简称FI)是学习Jav ...
- PAT (Basic Level) Practise (中文)- 1018. 锤子剪刀布 (20)
http://www.patest.cn/contests/pat-b-practise/1018 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统 ...
- Bootstrap 提示工具(Tooltip)插件方法的用法
方法 下面是一些提示工具(Tooltip)插件中有用的方法: 方法 描述 实例 Options: .tooltip(options) 向元素集合附加提示工具句柄. $().tooltip(option ...
- Bootstrap历练实例:模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,其目的是显示来自一个单独源的内容,可以在不离开父窗体的情况下进行一些交互,子窗体提供一些交互或信息. <!DOCTYPE html>&l ...
- Pig Latin-freecodecamp算法题目
Pig Latin 1.要求 Pig Latin把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay". 如果单词以元音开始,你只 ...
- 创建自定义 Estimator
ref 本文档介绍了自定义 Estimator.具体而言,本文档介绍了如何创建自定义 Estimator 来模拟预创建的 Estimator DNNClassifier 在解决鸢尾花问题时的行为.要详 ...
- 【贪心 计数 倍增】bzoj4458: GTY的OJ
倍增写挂调了半个晚上 Description 身为IOI金牌的gtyzs有自己的一个OJ,名曰GOJ.GOJ上的题目可谓是高质量而又经典,他在他的OJ里面定义了一个树形的分类目录,且两个相同级别的目录 ...
- Windows 10 建立wifi热点
如果当前是台式机那么需要一个usb的无线网卡,这里要注意如果你是使用台式机并且通过有线的方式上网,但是你的无线网卡适配器不能在禁用状态. 这里首先打开[运行]输入cmd,打开cmd(注意,这里要使用管 ...