https://www.luogu.org/problemnew/show/P2505

https://www.lydsy.com/JudgeOnline/problem.php?id=2750

神奇的题目...

题解

好像dijkstra序(dijkstra遍历点的顺序)就是“最短路dag”的一个拓扑序

错误记录:127行写成addto(d2[u],dn[v])

然而此题卡常,学了一下zkw线段树优化dijkstra

 #pragma GCC optimize(3)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
struct pii
{
int fi,se;
pii():fi(),se(){}
pii(int a,int b):fi(a),se(b){}
};
bool operator<(const pii &a,const pii &b)
{
return a.fi<b.fi;
}
namespace SS
{
int M;pii d[];
void init(int n)
{
int i;
//zkw线段树是满二叉树,i的lc为i*2(i<<1),rc为i*2+1(i<<1|1)
for(M=;M<=n+;M<<=);
//M-1表示除叶节点外共有多少节点
//理论上写M<=n就够了,写M<=n+1是为了简化后面边界处理
for(i=M;i<=M+M-;++i) d[i]=pii(0x3f3f3f3f,i-M);
//d[M+0..M+n]存储"数组"a[0..n]即叶节点
//注意叶节点下标从0开始
for(i=M-;i;--i) d[i]=min(d[i<<],d[i<<|]);
}
void set(int p,int x)
{
d[M+p]=pii(x,p);
for(int i=(M+p)>>;i;i>>=)
d[i]=min(d[i<<],d[i<<|]);
}
inline pii qmin()
{
return d[];
}
}
struct E
{
int to,nxt,d;
};
const int md=1e9+;
void addto(int &x,int y)
{
x+=y;
if(x>=md) x-=md;
}
int mul(int x,int y){return ll(x)*y%md;}
int an[];
int n,m;
namespace G
{
E e[];
int f1[],ne;
void me(int x,int y,int z)
{
e[++ne].to=y;e[ne].nxt=f1[x];f1[x]=ne;e[ne].d=z;
}
int d[],dn[],d2[];
int tt[];
bool vis[];
void calc(int S)
{
int u,k,v,i;pii t;
memset(d+,0x3f,sizeof(d[])*n);
memset(dn+,,sizeof(dn[])*n);
memset(vis+,,sizeof(vis[])*n);
memset(d2+,,sizeof(d2[])*n);
tt[]=;
SS::init(n);
SS::set(S,);
d[S]=;dn[S]=;
while()
{
t=SS::qmin();
if(t.fi==0x3f3f3f3f) break;
//printf("at%d %d\n",t.fi,t.se);
u=t.se;SS::set(u,0x3f3f3f3f);
//if(vis[u]) continue;
tt[++tt[]]=u;
vis[u]=;
for(k=f1[u];k;k=e[k].nxt)
{
v=e[k].to;
if(d[v]>d[u]+e[k].d)
{
d[v]=d[u]+e[k].d;
dn[v]=dn[u];
SS::set(v,d[v]);
}
else if(d[v]==d[u]+e[k].d)
addto(dn[v],dn[u]);
}
}
for(i=tt[];i>=;--i)
{
u=tt[i];d2[u]=;
for(k=f1[u];k;k=e[k].nxt)
{
v=e[k].to;
if(d[v]==d[u]+e[k].d)
{
addto(d2[u],d2[v]);
}
}
}
for(i=;i<=tt[];++i)
{
u=tt[i];
for(k=f1[u];k;k=e[k].nxt)
{
v=e[k].to;
if(d[v]==d[u]+e[k].d)
addto(an[k],mul(dn[u],d2[v]));
}
}
}
};
int main()
{
int i,x,y,z;
scanf("%d%d",&n,&m);
for(i=;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
G::me(x,y,z);
}
for(i=;i<=n;++i)
{
G::calc(i);
}
for(i=;i<=m;++i)
printf("%d\n",an[i]);
return ;
}

洛谷P2505||bzoj2750 [HAOI2012]道路 && zkw线段树的更多相关文章

  1. 洛谷P1438 无聊的数列 [zkw线段树]

    题目传送门 无聊的数列 题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]} ...

  2. 洛谷P3434 [POI2006]KRA-The Disks(线段树)

    洛谷题目传送门 \(O(n)\)的正解算法对我这个小蒟蒻真的还有点思维难度.洛谷题解里都讲得很好. 考试的时候一看到300000就直接去想各种带log的做法了,反正不怕T...... 我永远只会有最直 ...

  3. 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)

    LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...

  4. 洛谷P3928 Sequence2(dp,线段树)

    题目链接: 洛谷 题目大意在描述底下有.此处不赘述. 明显是个类似于LIS的dp. 令 $dp[i][j]$ 表示: $j=1$ 时表示已经处理了 $i$ 个数,上一个选的数来自序列 $A[0]$ 的 ...

  5. 【题解】洛谷P4145 花神游历各国(线段树)

    洛谷P4145:https://www.luogu.org/problemnew/show/P4145 思路 这道题的重点在于sqrt(1)=1 一个限制条件 与正常线段树不同的是区间修改为开方 那么 ...

  6. 洛谷P4588 [TJOI2018]数学计算 【线段树】

    题目链接 洛谷P4588 题解 用线段树维护即可 #include<algorithm> #include<iostream> #include<cstring> ...

  7. 【洛谷3822】[NOI2017] 整数(线段树压位)

    题目: 洛谷 3822 分析: 直接按题意模拟,完了. 将每次加 / 减拆成不超过 \(32\) 个对单独一位的加 / 减. 考虑给一个二进制位(下称「当前位」)加 \(1\) 时,如果这一位本来就是 ...

  8. 洛谷P4556 雨天的尾巴(线段树合并)

    洛谷P4556 雨天的尾巴 题目链接 题解: 因为一个点可能存放多种物品,直接开二维数组进行统计时间.空间复杂度都不能承受.因为每一个点所拥有的物品只与其子树中的点有关,所以可以考虑对每一个点来建立一 ...

  9. 洛谷P1712 [NOI2016]区间 尺取法+线段树+离散化

    洛谷P1712 [NOI2016]区间 noi2016第一题(大概是签到题吧,可我还是不会) 链接在这里 题面可以看链接: 先看题意 这么大的l,r,先来个离散化 很容易,我们可以想到一个结论 假设一 ...

随机推荐

  1. Long转换为date

    public static void main(String[] args) { Long time = System.currentTimeMillis(); System.out.println( ...

  2. ArcGIS服务器的feature图层限制

    今天遇到了esri.layers.FeatureLayer发布一个宗地图层,里面有些数据未显示,导致数据显示不全,原来是服务中数据返回参数限制. ArcGIS的feature图层(在JavaScrip ...

  3. jquery特效(5)—轮播图③(鼠标悬浮停止轮播)

    今天很无聊,就接着写轮播图了,需要说明一下,这次的轮播图是在上次随笔中jquery特效(3)—轮播图①(手动点击轮播)和jquery特效(4)—轮播图②(定时自动轮播)的基础上写出来的,也就是本次随笔 ...

  4. 常用的PHP类库,PHP开发者必备【转】

    PHP开发者常用的PHP类库和组件 PDF 生成器 FPDF - 这量一个可以让你生成PDF的纯PHP类库. Excel 相关 你的站点需要生成Excel?没有问题,下面这两个类库可以让你轻松做到这一 ...

  5. margin-top 为什么会影响父元素的 margin-top

    1.原因:  In this specification, the expression collapsing margins means that adjoining margins (no non ...

  6. 蓝桥杯G将军

    G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死 ...

  7. Linux设备驱动之Kobject、Kset

    作者:lizuobin(也是我们兼职的论坛答疑助手) 原文: https://blog.csdn.net/lizuobin2/article/details/51523693 纠结又纠结,虽然看了一些 ...

  8. Module:template

    ylbtech-Module: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech. ...

  9. 20个jQuery分页插件和教程

    1.客户端的jQuery 分页插件jPages jPages 是一个客户端的分页插件,但提供很多特性例如自动翻页.键盘和滚动浏览,延迟显示以及完全可定制的导航面板. Read More Demo 2. ...

  10. mfc给对话框添加背景

    void CMyProjetDlg::OnPaint() { CPaintDC dc(this);//用于绘制设备的上下文 CRect rect; GetClientRect(&rect); ...