「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,可以枚举 ...
随机推荐
- 使用Cordova将您的前端JavaScript应用打包成手机原生应用
假设我用JavaScript和HTML开发了一个前端应用,我想把该应用打包成能直接在手机上安装和运行(不通过浏览器)的原生应用,例如像下面这样.对应用的用户来说,他们得到的用户体验和真正的用Andro ...
- C#入门(2)
C#入门(2) Exception 基本异常的核心成员: System.Exception Property Meaning Data read-only,实现了IDirectory接口的一些键值对, ...
- shell 简单脚本 2
#!/bin/bash source /etc/profile APPLICATIONS_HOME="/cpic/cpicapp/cpic_analy/jars" APPLICAT ...
- Spring中的事务传播行为与隔离级别
事务传播行为 事务传播行为(为了解决业务层方法之间互相调用的事务问题): 当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己 ...
- C++11:移动构造函数的测试
C++11:移动构造函数的测试 代码如下: #include <iostream> #include <stddef.h> #include <Windows.h> ...
- Java中的日期(Calendar、Date)
(1)获取当前日期: java.util.Calendar calendar = java.util.Calendar.getInstance(); 或 = new java.util.Gregor ...
- 如何优化sql查询
借鉴https://www.cnblogs.com/ssrstm/p/5753068.html和https://www.cnblogs.com/exe19/p/5786806.html 1. 对查询进 ...
- RestTemplate进行表单请求,注意要使用MultiValueMap
在对接API的时候,有时候文档中会说,表单提交,这时候就需要用到 MultiValueMap来操作,下面给大家展示一个简单的demo. MultiValueMap<Object, Object& ...
- Tcp 三次握手 四次分手
看了 余晟以为的 “tcp没那么难吧”,算是对三次握手,四次分手有了一点点理解,记录下来以方便自己以后的查看. 原文链接:https://mp.weixin.qq.com/s?__biz=MzA3MD ...
- Python面向对象(约束,异常处理,md5加密)(五)
1. 类的约束 1. 写一个父类. 父类中的某个方法要抛出一个异常 NotImplementedError class Base: def login(self): raise NotImplemen ...