「CodePlus 2018 4 月赛」最短路
$n \leq 100000$,$m \leq 500000$的有向图,两点之间还可以以$a \ \ xor \ \ b$的代价从$a$到$b$,问$s$到$t$的最短路。
被自己蠢哭QAQ
首先两个点之间不走给定的边,最短路一定是直接$s$到$t$,因为一个二进制的差异至少要被算一次。观察$s$到$t$的过程,可以把这个过程完全等价地变成:一次只改一个二进制位,代价完全不变。因此$xor$的边只用连$nlog_2(n)$条,然后就无脑最短路了。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
//#include<vector>
#include<algorithm>
//#include<iostream>
//#include<assert.h>
using namespace std; int n,m,C,s,t;
#define maxn 200011
#define maxm 3500011
struct Edge{int to,next,v;}edge[maxm]; int first[maxn],le=;
void in(int x,int y,int v) {Edge &e=edge[le]; e.to=y; e.v=v; e.next=first[x]; first[x]=le++;} #define LL long long
LL dis[maxn];
struct qnode
{
LL d; int id;
bool operator > (const qnode &b) const {return d>b.d;}
};
priority_queue<qnode,vector<qnode>,greater<qnode> > q;
void dijkstra()
{
for (int i=;i<n;i++) dis[i]=1e18;
dis[s]=; q.push((qnode){,s});
while (!q.empty())
{
qnode now=q.top(); q.pop();
if (now.d!=dis[now.id]) continue;
for (int i=first[now.id];i;i=edge[i].next)
{
Edge &e=edge[i];
if (dis[e.to]>now.d+e.v)
{
dis[e.to]=now.d+e.v;
q.push((qnode){dis[e.to],e.to});
}
}
}
} int main()
{
scanf("%d%d%d",&n,&m,&C);
{int tmp=; while (tmp<=n) tmp<<=; n=tmp;}
for (int i=;i<n;i++)
for (int j=;j<;j++)
{
int k=i^(<<j);
if (k<n) in(i,k,(<<j)*C);
}
for (int i=,x,y,v;i<=m;i++) scanf("%d%d%d",&x,&y,&v),in(x,y,v);
scanf("%d%d",&s,&t);
dijkstra(); printf("%lld\n",dis[t]);
return ;
} /*
string s;
string ss[10]; bool vis[10];
int main()
{
ss[0]="no";
ss[1]="no";
ss[2]="no";
ss[3]="no way";
ss[4]="no way";
ss[5]="dont even";
ss[6]="are you serious";
ss[7]="go die in a hole";
ss[8]="worse";
ss[9]="terrible";
bool flag=1;
for (int i=0;i<=9;i++)
{
cout<<i<<endl;
getline(cin,s);
bool f=0;
for (int j=0;j<=9;j++) if (!vis[j] && s==ss[j]) {vis[j]=1; f=1; break;}
if (!f) {flag=0; break;}
}
int cnt=0;
for (int j=0;j<=9;j++) if (vis[j]) cnt++;
if (cnt>=7) while (1);
if (flag) puts("grumpy");
else puts("normal");
// puts("normal");
return 0;
}
*/
多出来的代码是愚人节Codeforces吸猫的错误方式。
「CodePlus 2018 4 月赛」最短路的更多相关文章
- 【LibreOJ】#6354. 「CodePlus 2018 4 月赛」最短路 异或优化建图+Dijkstra
[题目]#6354. 「CodePlus 2018 4 月赛」最短路 [题意]给定n个点,m条带权有向边,任意两个点i和j还可以花费(i xor j)*C到达(C是给定的常数),求A到B的最短距离.\ ...
- LOJ#6354. 「CodePlus 2018 4 月赛」最短路[最短路优化建图]
题意 一个 \(n\) 个点的完全图,两点之间的边权为 \((i\ xor\ j)*C\) ,同时有 \(m\) 条额外单向路径,问从 \(S\) 到 \(T\) 的最短路. \(n\leq 10^5 ...
- @loj - 6354@「CodePlus 2018 4 月赛」最短路
目录 @description@ @solution@ @accepted code@ @details@ @description@ 企鹅国中有 N 座城市,编号从 1 到 N . 对于任意的两座城 ...
- @loj - 6353@「CodePlus 2018 4 月赛」组合数问题 2
目录 @description@ @solution@ @accepted code@ @details@ @description@ 请你找到 k 个不同的组合数,使得对于其中任何一个组合数 \(C ...
- loj6300 「CodePlus 2018 3 月赛」博弈论与概率统计
link 题意: A和B玩游戏,每轮A赢的概率为p.现在有T组询问,已知A赢了n轮输了m轮,没有平局,赢一局A得分+1,输一局得分-1,问A得分期望值? $n+m,T\leq 2.5\times 10 ...
- 【LibreOJ】#6299. 「CodePlus 2018 3 月赛」白金元首与克劳德斯
[题意]给出坐标系中n个矩形,类型1的矩形每单位时间向x轴正方向移动1个单位,类型2的矩形向y轴正方向,初始矩形不重叠,一个点被矩形覆盖当且仅当它在矩形内部(不含边界),求$(-\infty ,+\i ...
- 【LibreOJ】#6298. 「CodePlus 2018 3 月赛」华尔兹 BFS
[题意]给定n*m的网格,起点和终点位置,一些格指定下一步的方向,一些格任意.要求为方向任意的格确定方向,使起点可以走到终点.n,m<=50. [算法]BFS [题解]这道题最好用BFS,因为D ...
- 「CodePlus 2018 3 月赛」白金元首与莫斯科
$n \leq 17,m \leq 17$,$n*m$的01矩形,对每一个0问:当他单独变成1之后,在其他0处放多米诺牌(不一定放满,可以不放)的方案数.膜$1e9+7$. 直接$dp$是$n^42^ ...
- loj #6302. 「CodePlus 2018 3 月赛」寻找车位【线段树+单调队列】
考虑静态怎么做:枚举右边界,然后枚举上边界,对应的下边界一定单调不降,单调栈维护每一列从当前枚举的右边界向左最长空位的长度,这样是O(nm)的 注意到n>=m,所以m<=2000,可以枚举 ...
随机推荐
- C#中窗体边框隐藏
设置窗体属性 FormBorderStyle 为 None
- winform中让显示的图片覆盖到父窗体保持父窗体的不可选中的状态,且任务栏中不会显示子窗体的任务选项
要求:为父窗体添加一个类似于加载等待的功能,当窗体点击备份时弹出且覆盖掉窗体 问题一产生:当为弹窗添加控件时,form.show();导致窗体卡死,控件变得透明化; 问题一分析:当窗体show();之 ...
- _IO_FILE
hctf2017的babyprintf解法是house of orange,深入学习了一下,牵扯出许多知识,这里先进行第一步:_IO_FILE结构 0x00 _IO_FILE glibc-2.2.1\ ...
- 用Kotlin开发android平台语音识别,语义理解应用(olamisdk)
Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而android Studio是 基于IntelliJ修改而来的.Kotlin是一门包含很多 ...
- NOIP 2017 图书管理员
题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需求码结尾,那 ...
- 基于ubuntu 14.04 kvm虚拟化部署
1. 宿主机环境(dell备份服务器) Ubuntu 14.04 LTS 64位 内存:16G 硬盘:2T 2. 确认CPU是否支持硬件虚拟化 root@shwilling:~# egrep -o ' ...
- verilog behavioral modeling--blocking and nonblocking
BLOCKIN ...
- 时间格式的处理和数据填充和分页---laravel
时间格式文档地址:http://carbon.nesbot.com/docs/ 这是些时间格式,只需要我们这么做就可以 我们在模板层,找到对应的模型对象那里进行处理就可以啦 2018-11-08 16 ...
- leepcode(斐波那契数列与float("inf")无穷大)解析
12.加一 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 ...
- 使用VMware克隆出来的新虚拟机无法联网-问题解决记录
背景: 使用VMware克隆出来的新虚拟机无法联网,重启网卡出现如下图提示: 继续输入#ifup ens33 提示: ens33: unknown interface: No such device ...