2019牛客暑期多校训练营(第六场) H:Train Driver (最短路+概率)
题意:给定无向图,Alice在A集合选一个点,Bob在B集合选一个点,CXK在全集里选择一个点。 然后问“三人到某一点集合打篮球的最小距离”的期望。
思路:做过一个裸题,就是给定三人位置,问去哪里集合距离代价最小。 那题就是三个点跑三次SPFA,就可以更新答案了。而此题有一个Cxk,非常的头疼,然而注意到边权为1,tm的不是直接BFS扩展就可以了吗。枚举Alice和Bob的位置,然后dis[i]=disA[i]+disB[j],然后就可以扩展了。 注意不要带log就可以过这题了,排序可以用基数排序,然后维护两个单调队列,每次取小的一个队首进行扩展。
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int inf=1e9;
int disA[][maxn],disB[][maxn],a[maxn],b[maxn];
int Laxt[maxn],Next[maxn],To[maxn],cnt,N; ll sum;
void add(int u,int v)
{
Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v;
}
void BFS(int dis[],int st)
{
rep(i,,N) dis[i]=inf; dis[st]=;
queue<int>q; q.push(st);
while(!q.empty()){
int u=q.front(); q.pop();
for(int i=Laxt[u];i;i=Next[i]){
if(dis[To[i]]==inf){
dis[To[i]]=dis[u]+;
q.push(To[i]);
}
}
}
}
int num[maxn],c[maxn],dis[maxn];
void solve() //基数排序+两个单调队列
{
rep(i,,N+N) num[i]=;
rep(i,,N) num[dis[i]]++,d[i]=;
rep(i,,N+N) num[i]+=num[i-];
rep(i,,N) c[num[dis[i]]--]=i;
queue<int>q1,q2;
rep(i,,N) q1.push(c[i]);
while(!q1.empty()||!q2.empty()){
if(q2.empty()||(!q1.empty()&&!q2.empty()&&dis[q1.front()]<dis[q2.front()])) {
int u=q1.front(); q1.pop();
for(int i=Laxt[u];i;i=Next[i]) {
if(dis[To[i]]>dis[u]+) {
dis[To[i]]=dis[u]+;
q2.push(To[i]);
}
}
}
else {
int u=q2.front(); q2.pop();
for(int i=Laxt[u];i;i=Next[i]) {
if(dis[To[i]]>dis[u]+) {
dis[To[i]]=dis[u]+;
q2.push(To[i]);
}
}
}
}
rep(i,,N) sum+=dis[i];
}
int main()
{
int C=,T,M,A,B,u,v;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&M);
rep(i,,N) Laxt[i]=; cnt=;
rep(i,,M){
scanf("%d%d",&u,&v);
add(u,v); add(v,u);
}
scanf("%d",&A); rep(i,,A) scanf("%d",&a[i]);
scanf("%d",&B); rep(i,,B) scanf("%d",&b[i]);
rep(i,,A) BFS(disA[i],a[i]);
rep(i,,B) BFS(disB[i],b[i]);
sum=;
rep(i,,A)
rep(j,,B){
rep(k,,N) dis[k]=disA[i][k]+disB[j][k];
solve();
}
ll ans=1LL*A*B*N;
ll g=__gcd(ans,sum);
printf("Case #%d: ",++C);
if(g==sum) printf("%lld\n",sum/g);
else printf("%lld/%lld\n",sum/g,ans/g);
}
return ;
}
2019牛客暑期多校训练营(第六场) H:Train Driver (最短路+概率)的更多相关文章
- 2019牛客暑期多校训练营(第三场)H题目
题意:给你一个N×N的矩阵,求最大的子矩阵 满足子矩阵中最大值和最小值之差小于等于m. 思路:这题是求满足条件的最大子矩阵,毫无疑问要遍历所有矩阵,并判断矩阵是某满足这个条件,那么我们大致只要解决两个 ...
- 2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文自动机)
https://ac.nowcoder.com/acm/contest/886/C 题意: 给出一个串A , 集合S里面为A串的回文字串 , 现在在集合S里面找出多少对(a,b),b为a的字串 分析: ...
- 2019牛客暑期多校训练营(第六场)J Upgrading Technology
传送门 题意: 就是给你n个技能,每个技能最高升到m级,每升一级就是耗费Cij钱,这个Cij可能是负的,如果所有技能都升到或者说超过j等级,就会获得Dj钱,这个Dj也有可能是负值,让你求你最多得到多少 ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
随机推荐
- aspxgridview 实现单选
<dxwgv:ASPxGridView ID="ASPxGridView1" runat="server" AutoGenerat ...
- Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(一)
一.说明 1)需求: Rancher 上部署 Jenkins-master,服务采用 Jenkins-slave 发布,发布完成后 Jenkins-slave 自动销毁. 2)环境: Rancher ...
- SQL Server ----- 生成sql 脚本
通过生成sql 脚本进行数据库转移 选中需要进行转移的数据库 点击生成脚本后出现 进入的是简介界面 直接点击下一步 进入到选择对象界面. 按照步骤进行设置 选择你需要的 架构和数据 ...
- Linux时间日期类,压缩和解压类
一.时间日期类 1.data指令 1.基本指令 date 显示当前日期 data +%Y 显示当前年份 data +%m 显示当前月份 data +%d 显示当前天 data +%Y-%m-%d %H ...
- sql中筛选第一条记录【分组排序】
问题描述 我们现在有一张表titles,共有4个字段,分别是emp_no(员工编号),title(职位),from_date(起始时间),to_date(结束时间),记录的是员工在某个时间段内职位名称 ...
- CentOS修改ulimit
一.概述 查看limit配置 # ulimit -a core data seg size (kbytes, -d) unlimited scheduling priority (-e) file s ...
- sqlserver获得数据库非聚集索引的代码
创建Index DECLARE @zindex_sql NVARCHAR(max); SET @zindex_sql = N''; SELECT @zindex_sql = @zindex_sql + ...
- C:\Program不是内部或外部命令,也不是可运行的程序或批处理文件。
问题描述:C:\Program不是内部或外部命令,也不是可运行的程序或批处理文件. 解决办法:C:\"Program Files"\具体文件目录. 具体场景:在cmd或者批处理文件 ...
- Static and Instance Methods in JavaScript
class.method/instance method https://abdulapopoola.com/2013/03/30/static-and-instance-methods-in-jav ...
- Python网络编程、爬虫之requests模块使用
一.python操作网络,也就是打开一个网站,或者请求一个http接口,使用urllib模块. urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib ...