排列组合思想.

先跑一遍最短路, 再从1节点开始搜索, 假如搜到一个点的路径长度等于最短路, 则记录到达该点的路径数 + 1.

最后遍历一遍, ans *= rec[i]

输出答案即可.

关键在于想到这个排列组合的思想.

#include<cstdio>
#include<cstring>
#include<algorithm>
#define F(x) for (L i=h[x],v=e[i].v,w=e[i].w;i;i=e[i].next,v=e[i].v,w=e[i].w)
using namespace std;
typedef long long L;
void read(L &x) {
x=0;
char c=getchar();
for (;c<'0' || c>'9';c=getchar());
for (;'0'<=c && c<='9';c=getchar()) x=x*10+c-'0';
}
const L Q=2147483647;
const L maxn=1e3+10;
const L maxm=maxn*maxn;
struct edge {
L v,w,next;
} e[maxm];
L tot=0,h[maxn];
inline void add(L u,L v,L w) {
e[++tot].v=v;e[tot].w=w;e[tot].next=h[u];
h[u]=tot;
}
L q[maxm],ql,qr,d[maxn];
bool inq[maxn];
void spfa(L s) {
memset(inq,0,sizeof inq);
memset(d,0x3f,sizeof d);
ql=qr=1;
q[qr]=s;
d[s]=0;
inq[s]=true;
while (ql<=qr) {
L u=q[ql++];
F(u) if (d[v]>d[u]+w) {
d[v]=d[u]+w;
if (!inq[v]) inq[v]=true,q[++qr]=v;
}
inq[u]=false;
}
}
L sum[maxn];
void check(L s) {
memset(inq,0,sizeof inq);
memset(sum,0,sizeof sum);
ql=qr=1;
q[qr]=s;
d[s]=0;
inq[s]=true;
while (ql<=qr) {
L u=q[ql++];
F(u) if (d[v]==d[u]+w) {
sum[v]++;
if (!inq[v]) inq[v]=true,q[++qr]=v;
}
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
L n,m;
read(n),read(m);
for (L i=1;i<=m;++i) {
L u,v,w;
read(u),read(v),read(w);
add(u,v,w),add(v,u,w);
}
spfa(1);
check(1);
L ans=1;
for (L i=1;i<=n;++i) if (sum[i]) (ans*=sum[i])%=Q;
printf("%lld\n",ans);
}

小W计树的更多相关文章

  1. 【牛客】小w的魔术扑克 (并查集?? 树状数组)

    题目描述 小w喜欢打牌,某天小w与dogenya在一起玩扑克牌,这种扑克牌的面值都在1到n,原本扑克牌只有一面,而小w手中的扑克牌是双面的魔术扑克(正反两面均有数字,可以随时进行切换),小w这个人就准 ...

  2. 【codevs2370】小机房的树 LCA 倍增

    2370 小机房的树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0 ...

  3. CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先)

    CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先) 题意分析 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天, ...

  4. bzoj2441【中山市选】小W的问题

    题目描述 有一天,小W找了一个笛卡尔坐标系,并在上面选取了N个整点.他发现通过这些整点能够画出很多个“W”出来.具体来说,对于五个不同的点(x1, y1), (x2, y2), (x3, y3), ( ...

  5. LCA(倍增在线算法) codevs 2370 小机房的树

    codevs 2370 小机房的树 时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点, ...

  6. bzoj 2441 [中山市选2011]小W的问题

    bzoj 2441 [中山市选2011]小W的问题 Description 有一天,小W找了一个笛卡尔坐标系,并在上面选取了N个整点.他发现通过这些整点能够画出很多个"W"出来.具 ...

  7. codevs2370 小机房的树 x

    2370 小机房的树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond   题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号 ...

  8. 【NOIP2017模拟6.25】小W的动漫

    题目 小W最近迷上了日本动漫,每天都有无数部动漫的更新等着他去看,所以他必须将所有的动漫排个顺序,当然,虽然有无数部动漫,但除了1号动漫,每部动漫都有且仅有一部动漫是它的前传(父亲),也就是说,所有的 ...

  9. 【JZOJ6389】小w学图论

    description 小w这学期选了门图论课,他在学习点着色的知识.他现在得到了一张无向图,并希望在这张图上使用最多n种颜色给每个节点染色,使得任意一条边关联的两个节点颜色不同. 小w获得一张n个节 ...

随机推荐

  1. Linux学习-服务器硬件数据的收集

    以系统内建 dmidecode 解析硬件配备 系统有个名为 dmidecode 的软件,它可以解析 CPU 型号.主板型号与内存相 关的型号等等~ [root@study ~]# dmidecode ...

  2. 使用supervisor方便调试程序

    调试过程中,有时需要修改代码,并时刻看到运行效果.如果每次终止程序又重启,会很麻烦. 可以使用supervisor,它可以监听代码文件,一旦发生改动会自动重启程序. 安装supervisor命令: n ...

  3. MyString的简单实现

    MyString.h 文件 #ifndef _STRING_H_ #define _STRING_H_ #include <iostream> using namespace std; c ...

  4. PreResultListener

    PreResultListener是要给监听器接口,他可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调. Struts 2 可以由ActionInvocation的addPreRe ...

  5. Response.End报错

    以下摘抄自博问:https://q.cnblogs.com/q/31506/       try catch中使用Response.End() 我在WebForm中用ajax发送请求到页面index. ...

  6. 简单使用EL进行标签的替换

    package com.ceshi; public class HtmlShow { public static String transfer(String txt,String cssClass) ...

  7. 【图文】 使用ant编译和发布java项目

        开发JavaEE项目经常会碰到修改代码后,项目没有重新编译的问题.老大给指明了一个解决办法:用ant编译项目. ant是apache基金会下的一个项目,是基于Java语言的构建工具.      ...

  8. kmp-模板-hd-1711

    p数组记录的是当该位置上失配的时候,跳到第几个进行继续匹配: /* 题意:给两个数串,求模板串第一此出现在源串中的位置,开头的位置:没有输出-1: 算法:kmp 先对字符串进行自匹配: 然后串间匹配: ...

  9. 最短路---dijsktra--邻接矩阵

    ; ; //点的个数 int dist[MAXNUM]; int prev[MAXNUM]; int A[MAXUNM][MAXNUM]; void Dijkstra(int v0) { bool S ...

  10. [luoguP2463] [SDOI2008]Sandy的卡片(后缀数组 + st表)

    传送门 很容易想到,题目中的相同是指差分数组相同. 那么可以把差分数组连起来,中间加上一个没有出现过的且字典序小的数 双指针移动,用st表维护height数组中的最小值. 当然用单调队列应该也可以且更 ...