bzoj5109: [CodePlus 2017]大吉大利,晚上吃鸡!
Description
Input
Output
求出S-T最短路图,以及传递闭包
任选一个以T为根的树形图,对每条非树边u->v,选一个随机数x,将v的父亲和u分别到根的路径异或上x
若S和T不联通,任选两个点
否则,可以选两个点,使得其中一个点不在最短路图上,另一个点为最短路图上点权为0的点,或者选最短路图上两个互不能到达且权值相同且非零的点
#include<bits/stdc++.h>
typedef long long i64;
typedef unsigned long long u64;
typedef unsigned int u32;
const int N=5e4+;
char ib[N*],*ip=ib;
int _(){int x;scanf("%d",&x);return x;}
int n,m,S,T,e0[N],ep=;
i64 l[N],ans=;
struct edge{
int to,v,nx;
}e[N*];
struct node{
int w;
i64 l;
bool operator<(const node&w)const{return l>w.l;}
};
std::priority_queue<node>q;
bool ed[N];
struct pos{
int w;
u64 v,l;
bool operator<(const pos&x)const{return v!=x.v?v<x.v:l>x.l;}
}ps[N];
u64 f[N];
int fa[N],pp=,cp=;
u32 su[N][N/+];
void f1(int w){
ed[w]=;
for(int i=e0[w];i;i=e[i].nx){
int u=e[i].to;
if(l[u]+e[i].v==l[w]){
if(!ed[u])fa[u]=w,f1(u);
else{
u64 z=rand();
z=z<<^rand();
f[w]^=z;
f[fa[u]]^=z;
}
}
}
}
int _get(u32*a,int x){return a[x>>]>>x&;}
void _set(u32*a,int x){a[x>>]|=<<x;}
void _or(u32*a,u32*b){
int p=n/+;
for(int i=;i<p;i+=){
a[i]|=b[i];
a[i+]|=b[i+];
a[i+]|=b[i+];
a[i+]|=b[i+];
}
}
void f2(int w){
_set(su[w],w);
ed[w]=;
for(int i=e0[w];i;i=e[i].nx){
int u=e[i].to;
if(l[u]+e[i].v==l[w]){
if(ed[u])f2(u),f[w]^=f[u];
_or(su[w],su[u]);
}
}
if(f[w])ps[pp++]=(pos){w,f[w],l[w]};
else ++cp;
}
void cal(){
f1(T);
f2(T);
std::sort(ps,ps+pp);
for(int i=,j=;i<pp;i=j){
int t=;
for(++j;j<pp&&ps[i].v==ps[j].v;++j)t+=_get(su[ps[i].w],ps[j].w);
ans+=i64(j-i-t)*t;
}
ans+=cp*i64(n-cp-pp);
printf("%lld\n",ans);
}
int main(){
n=_();m=_();S=_();T=_();
srand(n^m^S^T^);
for(int i=;i<m;++i){
int a=_(),b=_(),c=_();
e[ep]=(edge){b,c,e0[a]};e0[a]=ep++;
e[ep]=(edge){a,c,e0[b]};e0[b]=ep++;
}
for(int i=;i<=n;++i)l[i]=1ll<<;
q.push((node){S,l[S]=});
while(q.size()){
node w=q.top();q.pop();
if(w.l!=l[w.w])continue;
if(w.w==T)return cal(),;
for(int i=e0[w.w];i;i=e[i].nx){
int u=e[i].to;
if(l[u]>w.l+e[i].v)q.push((node){u,l[u]=w.l+e[i].v});
}
}
printf("%lld\n",n*i64(n-)/);
return ;
}
bzoj5109: [CodePlus 2017]大吉大利,晚上吃鸡!的更多相关文章
- BZOJ5109 CodePlus 2017大吉大利,晚上吃鸡!(最短路+拓扑排序+bitset)
首先跑正反两遍dij求由起点/终点到某点的最短路条数,这样条件一就转化为f(S,A)*f(T,A)+f(S,B)*f(T,B)=f(S,T).同时建出最短路DAG,这样图中任何一条S到T的路径都是最短 ...
- 【BZOJ5109】[CodePlus 2017]大吉大利,晚上吃鸡! 最短路+拓扑排序+DP
[BZOJ5109][CodePlus 2017]大吉大利,晚上吃鸡! Description 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏.在游戏 ...
- [BZOJ5109]大吉大利,晚上吃鸡!
[BZOJ5109]大吉大利,晚上吃鸡! 题目大意: 一张\(n(n\le5\times10^4)\)个点\(m(m\le5\times10^4)\)条边的无向图,节点编号为\(1\)到\(n\),边 ...
- GMA Round 1 大吉大利,晚上吃鸡
传送门 大吉大利,晚上吃鸡 新年走亲访友能干点啥呢,咱开黑吃鸡吧. 这里有32个人,每个人都可能想玩或者不想玩,这样子一共有$2^{32}$种可能.而要开黑当然得4人4人组一队(四人模式),所以说如果 ...
- 「CodePlus 2017 11 月赛」大吉大利,晚上吃鸡!(dij+bitset)
从S出发跑dij,从T出发跑dij,顺便最短路计数. 令$F(x)$为$S$到$T$最短路经过$x$的方案数,显然这个是可以用$S$到$x$的方案数乘$T$到$x$的方案数来得到. 然后第一个条件就变 ...
- 「CodePlus 2017 11 月赛」大吉大利,晚上吃鸡!
n<=50000,m<=50000的图,给s和t,问有多少点对$(a,b)$满足 嗯. 不会. 首先最短路DAG造出来,然后两个条件转述一下:条件一,$N_a$表示从s到t经过a的路径,$ ...
- LOJ6252. 「CodePlus 2017 11 月赛」大吉大利,晚上吃鸡! 最短路+bitset
题目传送门 https://loj.ac/problem/6252 https://lydsy.com/JudgeOnline/problem.php?id=5109 题解 首先跑最短路,只保留 \( ...
- [BZOJ5109/CodePlus2017]大吉大利,晚上吃鸡!
Description 最近<绝地求生:大逃杀>风靡全球,皮皮和毛毛也迷上了这款游戏,他们经常组队玩这款游戏.在游戏中,皮皮和毛毛最喜欢做的事情就是堵桥,每每有一个好时机都能收到不少的快递 ...
- [Code+#1]大吉大利,晚上吃鸡!
输入输出样例 输入样例#1: 7 7 1 7 1 2 2 2 4 2 4 6 2 6 7 2 1 3 2 3 5 4 5 7 2 输出样例#1: 6 输入样例#2: 5 5 1 4 1 2 1 1 3 ...
随机推荐
- Mysql 大量Sleep 解决
排查 SHOW GLOBAL VARIABLES LIKE 'wait_timeout'; SHOW GLOBAL VARIABLES LIKE 'interactive_timeout'; 在线更新 ...
- 巧用string中的contains巧解一道题目
题目:求0—7所能组成的奇数个数.假设最高八位数字. package edu.yuliang.lianxiti50; /* 题目:求0—7所能组成的奇数个数. *程序分析:最少也是1位数,最多能组成8 ...
- ELK简单安装测试
1 介绍组件 Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读). Kafka是一种高吞 ...
- 《Spring实战》读书笔记——如何实现自动化装配
加我微信公众号,一起夯实Java基础,向着诗和远方出发吧~ 如果所有的装配工作都交给Spring来自动完成,减少人工的干预,是不是就能减少依赖关系配置带来的麻烦呢?认真做自己的事儿吧,装配交给Spri ...
- Django_web框架的理解
web框架的本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 80)) sk.listen() while T ...
- html基础js
HTML中的三把利器的JS 又称为JavaScript,看着好像和Java有点联系,实际上他和java半毛钱关系都没有,JavaScript和我们学习的Python.Go.Java.C++等,都是一种 ...
- Vue2.5学习路线及基础知识总结。
在接触新技术不了解时,我喜欢去慕课网上看新手教程,在学习vue时,在慕课网上看了几个老师的视频,发现这挺好,讲到挺详细的,适合新手,有兴趣的可以先看一下,vue2.5入门教程. 然后在学习路上看见了一 ...
- informix 随笔
1.新建连接create new database connection 2.database Url: jdbc:informix-sqli://119.84.39.35:29999/gps_pr ...
- 在ubuntu服务器上安装tomcat 9
前提条件: 确保ubuntu服务器上 已经安装 java 8 或更高版本,安装java8可以参考我的另一篇博文 通过 ppa 在ubuntu server 上安装java 8 java -versio ...
- bootstrap实现列的拖动
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...