刷题总结——做运动(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分,还是贪心的分数 第一题和第二题我调了好 ...
随机推荐
- falling object思路总结
1.用检测的方法把falling object标记为一个类别,然后检测出类别.这种方式不可行的原因:因为falling object可能是任何东西,所以可能是一个路锥,也可能是一个玻璃瓶,还可能是掉下 ...
- JavaScript——图片懒加载
前言 有一个朋友问我这个问题,刚好有时间,现在就简单的写个Demo~ github | https://github.com/wangyang0210/bky/tree/picLoadLazy 内容 ...
- RabbitMQ Server的安装、配置及常用命令
首先需要安装Erlang环境: http://www.rabbitmq.com/server.html 下载RabbitMQ Server的windows安装包并安装到D盘下: http://www. ...
- NOIP模拟赛 czy的后宫6
czy的后宫6 题目描述 众所周知的是丧尸czy有很多妹子(虽然很多但是质量不容乐观QAQ),今天czy把n个妹子排成一行来检阅.但是czy的妹子的质量实在……所以czy看不下去了.检阅了第i个妹子会 ...
- 设置通过Maven创建的工程的JDK的版本,更改conf/settings.xml
eclipse提示警告如下: Build path specifies execution environment J2SE-1.5. There are no JREs installed in t ...
- CentOS7系统引导顺序以及排障
引导顺序 UEFi或BIOS初始化,运行POST开机自检 选择启动设备 引导装载程序, centos7是grub2 加载装载程序的配置文件:/etc/grub.d/ /etc/default/gru ...
- Golang tcp转发 remoteAddr错误
Golang tcp 转发 第一版本 accept获取的Conn里的localAddr做为源地址,remoteAddr来做为目的地址 // tcpForward package main import ...
- 【js】input 焦点到内容的最后
//引用部分应支持jQuery function find_focus(obj){ var curr = jQuery(obj); var val = curr.val(); c ...
- URLError与HTTPError
urllib2 的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误. 这里主要说的是U ...
- [转] 彻底搞懂word-break、word-wrap、white-space
white-space.word-break.word-wrap(overflow-wrap)估计是css里最基本又最让人迷惑的三个属性了,我也是用了n次都经常搞混,必须系统整理一下,今天我们就把这三 ...