$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 月赛」最短路的更多相关文章

  1. 【LibreOJ】#6354. 「CodePlus 2018 4 月赛」最短路 异或优化建图+Dijkstra

    [题目]#6354. 「CodePlus 2018 4 月赛」最短路 [题意]给定n个点,m条带权有向边,任意两个点i和j还可以花费(i xor j)*C到达(C是给定的常数),求A到B的最短距离.\ ...

  2. LOJ#6354. 「CodePlus 2018 4 月赛」最短路[最短路优化建图]

    题意 一个 \(n\) 个点的完全图,两点之间的边权为 \((i\ xor\ j)*C\) ,同时有 \(m\) 条额外单向路径,问从 \(S\) 到 \(T\) 的最短路. \(n\leq 10^5 ...

  3. @loj - 6354@「CodePlus 2018 4 月赛」最短路

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 企鹅国中有 N 座城市,编号从 1 到 N . 对于任意的两座城 ...

  4. @loj - 6353@「CodePlus 2018 4 月赛」组合数问题 2

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 请你找到 k 个不同的组合数,使得对于其中任何一个组合数 \(C ...

  5. 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 ...

  6. 【LibreOJ】#6299. 「CodePlus 2018 3 月赛」白金元首与克劳德斯

    [题意]给出坐标系中n个矩形,类型1的矩形每单位时间向x轴正方向移动1个单位,类型2的矩形向y轴正方向,初始矩形不重叠,一个点被矩形覆盖当且仅当它在矩形内部(不含边界),求$(-\infty ,+\i ...

  7. 【LibreOJ】#6298. 「CodePlus 2018 3 月赛」华尔兹 BFS

    [题意]给定n*m的网格,起点和终点位置,一些格指定下一步的方向,一些格任意.要求为方向任意的格确定方向,使起点可以走到终点.n,m<=50. [算法]BFS [题解]这道题最好用BFS,因为D ...

  8. 「CodePlus 2018 3 月赛」白金元首与莫斯科

    $n \leq 17,m \leq 17$,$n*m$的01矩形,对每一个0问:当他单独变成1之后,在其他0处放多米诺牌(不一定放满,可以不放)的方案数.膜$1e9+7$. 直接$dp$是$n^42^ ...

  9. loj #6302. 「CodePlus 2018 3 月赛」寻找车位【线段树+单调队列】

    考虑静态怎么做:枚举右边界,然后枚举上边界,对应的下边界一定单调不降,单调栈维护每一列从当前枚举的右边界向左最长空位的长度,这样是O(nm)的 注意到n>=m,所以m<=2000,可以枚举 ...

随机推荐

  1. JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...

  2. NASM 之 helloworld1

    SECTION .data msg: db "Hello World!", 0x0a len: equ $-msg SECTION .text global _main kerne ...

  3. currentStyle和getComputedStyle来获取外部样式

    currentStyle和getComputedStyle来获取外部样式 通过document.getElementById(id).style.XXX就可以获取到XXX的值,但意外的是,这样做只能取 ...

  4. shell脚本,每5个字符之间插入"|",行末不插入“|”。

    文本aaaaabbbbbcccccdddd eeeeefffffkkkkkvvvv nnnnnggggg 希望得到的结果如下: aaaaa|bbbbb|ccccc|dddd eeeee|fffff|k ...

  5. 如何查看 JAR 包的源代码

    ava 项目的编译文件经常被打包成 JAR(Java Archive,Java 归档文件)文件,当然,作为学习,有时候也非常想看到这个 JAR 被打包前的源代码是怎么样的. 下面提供几种查看 JAR ...

  6. baidumap demo(二)

    接口说明 百度地图API提供的搜索服务包括:POI检索,多关键字检索,公交方案检索,驾车路线检索,步行路线检索,地理编码,反地理编码,公交详情检索,在线建议查询,短串分享. 所有检索请求接口均为异步接 ...

  7. http post get 同步异步

    下面首先介绍一下一些基本的概念---同步请求,异步请求,GET请求,POST请求. 1.同步请求从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作.也 ...

  8. 【动态规划】loj#2485. 「CEOI2017」Chase

    有意思的可做dp题:细节有点多,值得多想想 题目描述 在逃亡者的面前有一个迷宫,这个迷宫由 nnn 个房间和 n−1n-1n−1 条双向走廊构成,每条走廊会链接不同的两个房间,所有的房间都可以通过走廊 ...

  9. 【动态规划】bzoj1044: [HAOI2008]木棍分割

    需要滚动优化或者short int卡空间 Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍 ...

  10. perl:_DATA_ _LINE_ _FILE_

    这三个应该是句柄: _DATA_ _FILE_ _LINE_ 没有找到具体介绍...记录于此,已被后续补充.