大意

给定一些城市间的路费,先要找出最大的LLL,同时R≥LR\geq LR≥L并且RRR要最小,使得sss到ttt间经过的城市可以免费


思路

在题目中并没有明确给出所有城市间的路费,因为其还需要考虑优惠的情况,所以我们先预处理所有城市的预处理情况,再分别二分LLL和RRR,中间用spfa(bfs)spfa\ (bfs)spfa (bfs)判断能否到达即可


代码

#include<queue>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#define N 200001
#define C 50001
using namespace std;int n,m,u[N],v[N],w[N],z,p;
int head[C],fa[C],dis[C],tot,s,t,l1,l2,r1,r2,x[N];
bool vis[C];
double l=15000,r;
struct node{int next,to;double w;}e[N<<1];
inline void add(register int u,register int v,double w){e[++tot]=(node){head[u],v,w};head[u]=tot;return;}
inline int read()//读入优化
{int d=1,f=0;char c;while(c=getchar(),c<48||c>57)if(c=='-')d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),c>47&&c<58)f=(f<<3)+(f<<1)+c-48;return d*f;
}
inline bool spfal(register int xz)//spfa判断l是否合法
{memset(dis,0x3f,sizeof(dis));//初始化dis数组,用来判断能否到达memset(vis,0,sizeof(vis));//防止重复走过queue<int>q;q.push(s);vis[s]=true;dis[s]=0;while(q.size()){int x=q.front();q.pop();vis[x]=true;for(register int i=head[x];i;i=e[i].next){int y=e[i].to;double w=e[i].w;if(w>=xz&&dis[y]>dis[x]+1)//注意这里比普通的spfa多了一个限制(xz){dis[y]=dis[x]+1;if(!vis[y]) q.push(y),vis[y]=true;}}vis[x]=false;}return dis[t]!=0x3f3f3f3f;
}
inline bool spfar(register int xz)//判断在该限制是否能到达t点
{memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));queue<int>q;q.push(s);vis[s]=true;dis[s]=0;while(q.size()){int x=q.front();q.pop();vis[x]=true;for(register int i=head[x];i;i=e[i].next){int y=e[i].to;double w=e[i].w;if(w<=xz&&w>=l1*1.000&&dis[y]>dis[x]+1)//注意同时也要大于等于L{dis[y]=dis[x]+1;if(!vis[y]) q.push(y),vis[y]=true;}}vis[x]=false;}return dis[t]!=0x3f3f3f3f;
}
signed main()
{n=read();m=read();for(register int i=1;i<=m;i++)//输入{u[i]=read();v[i]=read();w[i]=read();}for(register int i=1;i<=n;i++){p=read();while(p--) fa[read()]=i;//标记每个城市对应的省份}for(register int i=1;i<=n;i++) x[i]=read();//输入优惠值s=read();t=read();for(register int i=1;i<=m;i++){double val=w[i]*(x[fa[u[i]]]+x[fa[v[i]]])*1.000/200;//因为是按百分比算的,所以要除以200add(u[i],v[i],val);add(v[i],u[i],val);//建边l=min(l,val);r=max(r,val);//最终的优惠价格必定在这些路径的最大最小值之间}l1=l2=l;r1=r2=r;//初始化while(l1<r1)//确定左边界{int mid=(l1+r1)>>1;if(spfal(mid)) l1=mid+1;else r1=mid;//二分}while(!spfal(l1)) l1--;//判断是否合法,不合法就不断放宽要求,直至合法为止l2=l1;//此时的l1即为L,再在L和r2之间继续查找Rwhile(l2<r2)//二分{int mid=(l2+r2)>>1;if(spfar(mid)) r2=mid;else l2=mid+1;//二分}while(!spfar(l2)) l2++;//判断l2是否合法,不合法则放宽要求,直至合法为止printf("%d %d",l1,l2);//输出
}

2018年9月22日提高组模拟赛 T1 遨游相关推荐

  1. 2018年10月18日提高组 T3 摘果子

    大意 在选择一个东西前必须要选择另一样东西,选择一样东西可以获得一定的价值,但需要花费一定的代价. 求代价 ≤ m \leq m ≤m的最大价值 思路 有依赖性的背包问题(树形背包问题) 套模板(选课 ...

  2. 纪中20日c组模拟赛T1 2121. 简单游戏

    T1 2121. 简单游戏 (File IO): input:easy.in output:easy.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto Pro ...

  3. JZOJ7月28日提高组反思

    JZOJ7月28日提高组反思 T1 赛时 赛后 T2 赛时 赛后 T3 赛时 赛后 T4 赛时 赛后 炸了呀 10(40)+0(0)+0(0)+14(30)=24(70) T1 赛时 字符串? 准备放 ...

  4. 证券期货经营机构私募资产管理业务管理办法 2018年10月22日

    证券期货经营机构私募资产管理业务 管理办法 目 录 第一章 总则 第二章 业务主体 第三章 业务形式 第四章 非公开募集 第五章 投资运作 第六章 信息披露 第七章 变更.终止与清算 第八章 风险管理 ...

  5. SSL2668 2017年8月7日提高组T1 根(dfs)

    2017年8月7日提高组T1 根 Description 一天,小B得到了一棵n个节点的树.无聊至极的小B想要找出一个点,使得以这个点为根时,所有点的深度之和最大.但小B打开手机,发现他最爱的re:c ...

  6. SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)

    2017年10月30日提高组T2 摘Galo Description 0v0在野外看到了一棵Galo树,看到食物的0v0瞪大了眼睛,变成了OvO. 这棵Galo树可以看做是一棵以1号点为根的n个点的有 ...

  7. 【GDKOI2014】JZOJ2020年8月13日提高组T3 壕壕的寒假作业

    [GDKOI2014]JZOJ2020年8月13日提高组T3 壕壕的寒假作业 题目 Description Input Output 输出n行.第i行输出两个整数,分别表示第i份作业最早完成的时刻以及 ...

  8. JZOJ2020年8月11日提高组T3 页

    JZOJ2020年8月11日提高组T3 页 题目 Description 战神阿瑞斯听说2008年在中华大地上,将举行一届规模盛大的奥林匹克运动会,心中顿觉异常兴奋,他想让天马在广阔的天空上,举行一场 ...

  9. pycharm 激活码2018年9月22日亲测有效

    pycharm 激活码2018年9月22日亲测有效 1.打开激活窗口 2.选择 Activate new license with License server (用license server 激活 ...

最新文章

  1. [转] Java快速教程
  2. 物联网经济价值的深度探究
  3. dynamic_caast操作符
  4. jparepository查询所有_JPA – JpaRepository 中使用的查询方法
  5. C# ObservableCollection和List的区别
  6. [原]排错实战——拯救加载调试符号失败的IDA
  7. 【做题记录】[NOIP2016 普及组] 魔法阵
  8. 哪个计算机无法做到双屏显示,怎么启用双屏显示设置【图文介绍】
  9. 热备份路由协议(HSRP)
  10. C++新特性探究(十二):static_assert(提前判误)
  11. 在字符串中找出第一个只出现一次的字符
  12. 任务管理器中arcsom.exe和arcsoc.exe的个数问题
  13. linux 显示目录的大小不一样,linux目录大小显示不实时问题
  14. 新人Unity下载安装
  15. UG二次开发-程序视图根组
  16. 如何使用Python itchat库玩转微信, 统计好友信息, 设置自动回复和发送本地文件...
  17. 玩客云5.9千兆固件、docker、青龙面板
  18. html页面如何获取已经存在的token,移动端通过携带token访问html页面
  19. 二极管、三极管、晶闸管的区别
  20. 基于Pushlet实现的网站消息推送

热门文章

  1. 如何清除博客中广告内容
  2. html 下拉组件被下面的组件挡住,select挡住div的5种解决方法
  3. Unity高频面试题总结
  4. mysql基础----基本命令与13道练习
  5. jquery获取所有子元素宽度之和
  6. 遥感影像变化检测数据集
  7. Oracle前台主机,Oracle 数据库主机巡检
  8. 控制台也能炫-chrome浏览器控制台输出彩色文字
  9. 【ECharts系列|03可视化大屏】大数据管理平台实时展示
  10. wireshark检测广播风暴_带你走进网络世界:一文读懂广播风暴