图论-生成树-黑暗城堡
没什么好说的,没有想清楚结果把计算ans数组时候用到的链式向前星的head写错了。。WA得还剩20分。
应该要写head[v[i].v]的,不能写head[i],因为现在的第i个位置上放的已经不是原来的第i个点了。
#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
#define random(l,r) ((l)+rand()%((r)-(l)+1))
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int inf=1e9+10,mod=2147483647,N=2222,M=2e6+10000;
const double eps=1e-6;
struct node{int v,dis;bool friend operator < (node a,node b){return a.dis<b.dis;}
}v[N];
int nxt[M],to[M],w[M],head[N],len;
int n,m,ans[N],pos[N];
bool vis[N];
ll anss=1;
inline void addedge(int a,int b,int ww){nxt[++len]=head[a]; head[a]=len; to[len]=b; w[len]=ww;
}
inline void Dijkstra(){rep(i,1,n) v[i].v=i,v[i].dis=inf;v[1].dis=0;rep(i,1,n-1){int now=inf,k=0;rep(j,1,n) if((vis[j]==false)&&(v[j].dis<now)) k=j,now=v[j].dis;vis[k]=true;for(int e=head[k];e!=0;e=nxt[e]) v[to[e]].dis=min(v[to[e]].dis,v[k].dis+w[e]);}
}
int main(){ios::sync_with_stdio(false); cin.tie(0);cin>>n>>m;rep(i,1,m){int a,b,w; cin>>a>>b>>w;addedge(a,b,w); addedge(b,a,w);}Dijkstra();//rep(i,1,n) printf("dis[%d]=%d\n",i,v[i].dis);sort(v+1,v+1+n);rep(i,1,n) pos[v[i].v]=i;//rep(i,1,n) printf("v[%d]=%d\n",i,v[i].v);ans[v[1].v]=1;rep(i,1,n){for(int e=head[v[i].v];e!=0;e=nxt[e]){if(v[pos[to[e]]].dis==v[i].dis+w[e]) ans[v[pos[to[e]]].v]++;}}rep(i,1,n) anss=(anss*(long long)(ans[i]>0?ans[i]:1))%mod;cout<<anss;return 0;
}
图论-生成树-黑暗城堡相关推荐
- 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数
1486:黑暗城堡 [题目描述] 知道黑暗城堡有 N 个房间,M 条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设 Di为如果所有的通道都被修建,第 i 号房间与第 1 ...
- 一本通 P1486 【黑暗城堡】
题库 :一本通 题号 :1486 题目 :黑暗城堡 link :http://ybt.ssoier.cn:8088/problem_show.php?pid=1486 思路 :这道题既然要求使加入生成 ...
- SPFA算法+例题 :问题 A: 黑暗城堡
SPFA算法 算法思想: 1) 三角形中的性质:同一三角形内两边之和大于第三边. 2)由上面那一条性质,我们可以想出一个方法来更新源点到其他点的最短的路径:用中间节点k松弛u->k->v, ...
- 黑暗城堡 最短路径生成树
dark♂城堡(233 题目描述 一个图,有n个节点,m条带权值无向边,构造一颗生成树,使得树上的点到根(1)的距离为该点到1的最短距离.输出符合条件的生成树的个数 答案模取\(2^{31}-1\) ...
- acwing349 黑暗城堡 ——最短路径生成树
Link 思路 最短路径生成树计数 代码 // // #include <bits/stdc++.h> using namespace std; //#define mp make_pai ...
- 黑暗城堡-(最小生成树+最短路)
咕咕咕 prim的特点是从一个点开始,不断把距离最短的点加入图中,在以此延伸.是一种贪心的想法.当知道prim的特点的时候,就可以想到这题用prim. 这题又要求实际路径=最短路径,,也可以想到用di ...
- 图论 —— 生成树 —— 生成树计数
[概述] 给出一个由 n 个点和 m 条边构成的简单无向加权图,有时需要对生成树计数或对最小生成树计数. 当对生成树计数时,利用基尔霍夫矩阵的 Matrix-Tree 定理即可解决,而对最小生成树计数 ...
- 图论 —— 生成树 —— 曼哈顿距离最小生成树
[概述] 当给出一些二维平面的点时,记两点间距离为曼哈顿距离,此时的最小生成树,称为曼哈顿最小距离生成树. 对于 n 个点来说,最朴素的做法是暴力求出所有所有点两两之间的曼哈顿距离,然后再跑最小生成树 ...
- 图论 —— 生成树 —— 次小生成树
[概述] 对于给定的无向图 G=(V,E),设 T 是图 G 的一个最小生成树,那么,对于除 T 外的第二小的生成树 T' 即为图的次小生成树. 简单来说,最小生成树是生成树的最小解,次小生成树是生成 ...
- 图论 —— 生成树 —— 增量最小生成树
[概述] 所谓最小增量生成树问题,即:给定包含 n 个点的空图,依次加入 m 条带权边,每次加入一条边,就输出当前图中最小生成树的权值,如果没有生成树,则输出无解 求解最小增量生成树的方法是:根据最小 ...
最新文章
- javascript搜索框联想搜索_js实现类似于联想关键词的搜索功能(附代码)
- 【LOJ】#2014. 「SCOI2016」萌萌哒
- 管道过滤器(Pipe-And-Filter)模式
- teststand调用python模块_TestStand 界面重置【小技巧】
- 深度学习中的多任务学习介绍
- Python实现日周月排行榜
- Linux中reboot和shutdown的异同
- 几个免费的长链接缩短工具
- R语言survival包Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、drop1函数计算cox回归模型自变量似然比检验值、删除冗余变量重新构建cox模型
- 技术开放平台,推进开放银行布局
- Mybatis常见错误 Could not find resource com/mybatis/mapper/UserInfoMapper.xml
- 優しさの理由 (冰菓op)歌词
- 【Codeforces 526F】【JZOJ4687】奇袭
- 苹果 App 转移图文详解
- 共享开源技术,共建开放生态丨平凯星辰余梦杰出席 2022 世界互联网大会开源论坛圆桌对话
- 软件学院研究方向,对研究方向迷茫的同学一定要看(据说是一位北大软院前辈写的)
- UnityShader案例篇—绘制雨滴
- css画表格多级表头,element UI实现动态生成多级表头
- 编程高手成长的六个阶段,你处于哪一阶段?
- platform驱动