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 ...
随机推荐
- 【原创】Arduino制作Badusb实践
1.U盘构造 U盘由芯片控制器和闪存两部分组成. 芯片控制器负责与PC的通讯和识别,闪存用来做数据存储: 闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互:固件无 ...
- Java 程序员必须了解的 7 个性能指标
来源:王韵菲 本文中,小编搜集了7个最有影响的衡量标注,让你可以不依赖日志文件来了解应用程序.现在,让我们看看这些性能指标,并了解如何查看并收集它们: 1.响应时间和吞吐量 根据应用程序的响 ...
- 赚钱快的app
赚钱快的app目前强力推荐6款都是很不错的 宝石星球下载地址:http://www.baoshixingqiu.com/redPacket?key=548341 雪梨网APP下载地址 http://w ...
- 暗影精灵2pro——使用一年多后电池鼓包,传说中的更新BIOS问题(惠普15ax-226tx)
17年春天的时候正好赶上自己在东北一所省会城市的211大学读硕毕业,为了更新下自己的装备,同时也是为了纪念在母校读书7年的经历,遂够了一款暗影精灵2pro,如上图右侧所示,是一款颜值较高的很轻薄的笔记 ...
- java数组的定义
class ArrayDome { public static void main(String[] args) { //元素类型[] 数组名 创建一个 元素类型[元素个数或数组长度] /* 需要一个 ...
- 【EMV L2】GPO响应以及AIP、AFL
[GPO命令] 终端通过GPO(Get Processing Options)命令 通知卡片交易开始.命令数据为PDOL指定的终端数据. [GPO响应] 卡片在GPO命令的响应中返回AIP和AFL:A ...
- c++中函数的内存注意项
函数不能返回指向栈内存的指针!因为返回的都是值拷贝! char *str = "abcd"这样就是字符串常量,这种能返回,而char str[] = "abcd" ...
- md5Util
package com.rscode.credits.util; /** * MD5加密类 * @author 12 */ import java.security.MessageDigest; pu ...
- 前端导出功能get和post两种方式
get方式: var url = ’/sjdd/eventQuery/exportSuperviseEventExcel.do?beginDate=' + beginDate + '&endD ...
- c#上课总结
private 是完全私有的,只有当前类中的成员能访问到. protected 是受保护的,只有当前类的成员与继承该类的类才能访问. Ctrl+k+c 多行注释Ctrl+k+u 解除注释 e ...