描述

你知道黑暗城堡有 NN个房间,MM 条可以制造的双向通道,以及每条通道的长度。

城堡是树形的并且满足下面的条件:

设 DiDi为如果所有的通道都被修建,第 ii 号房间与第 11 号房间的最短路径长度;

而SiSi 为实际修建的树形城堡中第 ii 号房间与第 11 号房间的路径长度;

要求对于所有整数 ii (1≤i≤N1≤i≤N),有 Si=DiSi=Di 成立。

你想知道有多少种不同的城堡修建方案。当然,你只需要输出答案对 231−1231−1 取模之后的结果就行了。

输入

第一行为两个由空格隔开的整数 N,MN,M;

第二行到第 M+1M+1 行为 33个由空格隔开的整数x,y,lx,y,l:表示 xx 号房间与 yy 号房间之间的通道长度为ll。

输出

一个整数:不同的城堡修建方案数对 231−1231−1 取模之后的结果。

样例输入

4 6
1 2 1
1 3 2
1 4 3
2 3 1
2 4 2
3 4 1

样例输出

6

咳咳,我觉得这道题定三级实在有点过分(因为我现在也很糊)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define inf 0x3f3f3f3f3f3f
#define ll long long
#define modd 2147483647
using namespace std;
ll read(){ll x=0,f=1;char ch;while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}return x*f;
}
struct node{ll u,v,w,nxt;
}e[2000101];
struct node2{ll w,id;
}dis[100101];
ll fir[1000101],cnt=0;
ll n,m,s,ed;
ll vis[1000101];
ll pos[1001][1001];
struct edge{ll u,dis;bool operator < (const edge& lala)const{return dis>lala.dis;}
};
void add(ll x,ll y,ll z){e[++cnt].nxt=fir[x];e[cnt].u=x;e[cnt].v=y;e[cnt].w=z;fir[x]=cnt;
}
void dijis(ll st){priority_queue<edge> q;for(ll i=1;i<=n;i++)dis[i].w=inf,dis[i].id=i;dis[st].w=0;dis[st].id=1;q.push((edge){st,0});while(!q.empty()){edge x=q.top();q.pop();ll u=x.u,d=x.dis;if(d!=dis[u].w)continue;for(ll i=fir[u];i;i=e[i].nxt){ll v=e[i].v,uu=e[i].u;if(dis[v].w>dis[uu].w+e[i].w){dis[v].w=e[i].w+dis[uu].w;q.push((edge){v,dis[v].w}); }}}
}
bool cmp(node2 a,node2 b){return a.w<b.w;
}
int main(){scanf("%lld%lld",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)pos[i][j]=inf;for(ll i=1;i<=m;i++){ll x,y,z;x=read(),y=read(),z=read();add(x,y,z); add(y,x,z);pos[x][y]=pos[y][x]=min(pos[x][y],z);}dijis(1);//for(int i=1;i<=n;i++)cout<<dis[i].w<<' ';sort(dis+1,dis+n+1,cmp);ll ans=1;for(int i=2;i<=n;i++){ll tot=0;for(int j=1;j<i;j++){ll uu=dis[i].id,vv=dis[j].id;if(dis[i].w==dis[j].w+pos[uu][vv])tot++;}if(tot==0)tot=1;ans=ans*tot%modd;}printf("%lld",ans);return 0;
}

其实呢,这个代码是错的
别急啊,思路肯定是对的,最短路+不带合并的生成树
因为数据范围小我们可以暴力统计直接使用乘法原理
所以先求出最短路径dis[i],记录dis[i[是哪个点的最短路径id;
把满足dis[x]=dis[y]+pos[i][j]的一个个点的往生成树之中加
再根据乘法原理求出答案
然后?
然后就错了...
9.12 21:36
之前没有来得及填坑,目前已经调出了50分代码emm...已更正

9.12 21:48
已更正完毕,sort的时候没留神从0开始排了....这种错就是难得查啊。

对于以前被坑了的小伙伴们表示深深抱歉。

转载于:https://www.cnblogs.com/lisuier/p/9588746.html

一本通 3.1 例 1」黑暗城堡相关推荐

  1. 【C++】「一本通 1.1 例 4」加工生产调度

    「一本通 1.1 例 4」加工生产调度 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1425 LibreOJ ...

  2. LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】

    10082. 「一本通 3.3 例 1」Word Rings [题目描述] 传送门 [题解] 将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值.二分枚举答案,最后SPFA刷正环,因为只要有 ...

  3. 【C++】「一本通 1.1 例 2」种树

    「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...

  4. #10001. 「一本通 1.1 例 2」种树

    #10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...

  5. 【C++】「一本通 1.1 例 5」智力大冲浪

    「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...

  6. Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)

    题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...

  7. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)

    加工生产调度 题目描述 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.询问怎样安排这 ...

  8. 「一本通 4.1 例 3」校门外的树 (loj10115)

    题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作: K=1,读入 l,r表示在 l 到 r 之间种上 ...

  9. loj10157. 「一本通 5.2 例 5」皇宫看守

    思路: 例四是覆盖全部边,dp两个状态,例五是覆盖全部点,dp三个状态. #include<cstdio> #include<iostream> #include<cst ...

  10. #10019. 「一本通 1.3 例 2」生日蛋糕

    冥想盆 感性理解深搜剪枝(看完这个再看下面的文章) 理解本题的思路 [代码实现1:最慢最好理解(自己打的):100多ms] [代码实现2:次慢:30多ms] [代码实现3:最快:10多ms] 最后放上 ...

最新文章

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer
  2. 构建本地缓存java_Java8简单的本地缓存实现
  3. java if else 过多_Java中if-else过多怎么解决
  4. 失败的windows系统服务调用readfile():管道已结束?_操作系统之进程详解(一)
  5. jQuery动画高级用法(上)——详解animation中的.queue()函数
  6. 最长无重复字符子串?
  7. 计算机应用基础成教作业,(计算机应用基础成教08A卷1.doc
  8. 酷享CMS企业级授权系统源码 有工单系统
  9. SpringBoot Jar包外部application文件
  10. Python安装包时出现的问题及解决方案
  11. Quartus仿真步骤
  12. c语言程序设计实验总结范文,《c语言程序设计》课程实验报告模板.doc
  13. vmix一块屏幕分成三块_定点爆破三块绊脚石,OLED电视或可星火燎原
  14. 使用Kettle从国家统计局下载行政区划代码数据
  15. 【Unity3D】使用 FBX 格式的外部模型 ③ ( FBX 模型中的材质重映射 | FBX 模型使用外部材质 | FBX 模型的分解重组 )
  16. 大学计算机基础知识学习计划,大学个人学习计划
  17. mysql将多行结果合并
  18. 国嵌,够欠!---ARM在线教育误区
  19. 道达尔远景光伏助力中天钢铁打造低碳绿色钢城
  20. 高性能服务器主板,单路至尊性能 英特尔S1400FP4服务器主板

热门文章

  1. chromebook 笔记本 TrueNas 设置 wifi 连网
  2. 万字长文!让你懂透编译原理(二)——第二章 高级语言及其语法描述
  3. 医院信息系统基本功能规范---医疗保险接口功能规范
  4. T32用的一个python脚本-替换文件中的文件夹路径字符串
  5. 新浪财经独家对话达利欧:桥水员工离职率曾高达30%
  6. 终于把所有的 Python 库都整理出来啦,赶紧收藏!!!
  7. python的jieba分词词性标注
  8. 机器人设计的步骤有哪些
  9. 萝卜青菜各有所爱------npm和yarn
  10. Magento(CE1.X)自带模块解析五