[HAOI2012]Road
2750: [HAOI2012]Road
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 728 Solved: 349
[Submit][Status][Discuss]
Description
C国有n座城市,城市之间通过m条单向道路连接。一条路径被称为最短路,当且仅当不存在从它的起点到终点的另外一条路径总长度比它小。两条最短路不同,当且仅当它们包含的道路序列不同。我们需要对每条道路的重要性进行评估,评估方式为计算有多少条不同的最短路经过该道路。现在,这个任务交给了你。
Input
第一行包含两个正整数n、m
接下来m行每行包含三个正整数u、v、w,表示有一条从u到v长度为w的道路
Output
输出应有m行,第i行包含一个数,代表经过第i条道路的最短路的数目对1000000007取模后的结果
Sample Input
1 2 5
2 3 5
3 4 5
1 4 8
Sample Output
3
2
1
HINT
数据规模
30%的数据满足:n≤15、m≤30
60%的数据满足:n≤300、m≤1000
100%的数据满足:n≤1500、m≤5000、w≤10000
Source
- #include<cstdio>
- #include<cstring>
- #include<queue>
- #define pir pair<int,int>
- using namespace std;
- const int N=;
- const int inf=0x3f3f3f3f;
- const int mod=1e9+;
- struct edge{int v,w,next;}e[N<<];int tot,head[N];
- int n,m,dis[N],cnt[N],sum[N],ans[N*],q[N*];bool vis[N*];
- void add(int x,int y,int z){
- e[++tot].v=y;e[tot].w=z;e[tot].next=head[x];head[x]=tot;
- }
- void dijkstra(int S){
- memset(dis,inf,(n+)<<);
- memset(vis,,(n+)<<);
- memset(cnt,,(n+)<<);cnt[S]=;
- priority_queue<pir,vector<pir>,greater<pir> >q;
- q.push(make_pair(dis[S]=,S));
- while(!q.empty()){
- pir t=q.top();q.pop();
- int x=t.second;
- if(vis[x]) continue;
- vis[x]=;
- for(int i=head[x];i;i=e[i].next){
- if(!vis[e[i].v]&&dis[e[i].v]>dis[x]+e[i].w){
- dis[e[i].v]=dis[x]+e[i].w;
- cnt[e[i].v]=cnt[x];
- q.push(make_pair(dis[e[i].v],e[i].v));
- }
- else if(dis[e[i].v]==dis[x]+e[i].w){
- cnt[e[i].v]+=cnt[x];
- cnt[e[i].v]%=mod;
- }
- }
- }
- }
- int dfs(int x){
- if(sum[x]) return sum[x];
- sum[x]=;
- for(int i=head[x];i;i=e[i].next){
- if(dis[e[i].v]!=dis[x]+e[i].w) continue;
- sum[x]+=dfs(e[i].v);
- ans[i]+=sum[e[i].v]*cnt[x];
- ans[i]%=mod;
- }
- return sum[x];
- }
- void init(){
- scanf("%d%d",&n,&m);
- for(int i=,x,y,z;i<=m;i++){
- scanf("%d%d%d",&x,&y,&z);
- add(x,y,z);
- }
- }
- void work(){
- for(int i=;i<=n;i++){
- memset(sum,,(n+)<<);
- dijkstra(i);
- dfs(i);
- }
- for(int i=;i<=m;i++) printf("%d\n",ans[i]);
- }
- int main(){
- freopen("roadsw.in","r",stdin);
- freopen("roadsw.out","w",stdout);
- init();
- work();
- return ;
- }
[HAOI2012]Road的更多相关文章
- BZOJ2750: [HAOI2012]Road
2750: [HAOI2012]Road Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 261 Solved: 113[Submit][Status ...
- BZOJ 2750: [HAOI2012]Road( 最短路 )
对于每个点都跑最短路, 然后我们得到了个DAG, 在这DAG上更新每条边的答案. 考虑e(u, v)∈DAG对答案的贡献: 假设从S到u得路径数为A[u], 从v出发到达任意点的路径数为B[v], ...
- bzoj 2750: [HAOI2012]Road
Description C国有n座城市,城市之间通过m条单向道路连接.一条路径被称为最短路,当且仅当不存在从它的起点到终点的另外一条路径总长度比它小.两条最短路不同,当且仅当它们包含的道路序列不同.我 ...
- bzoj 2750: [HAOI2012]Road【spfa+dfs】
枚举起点做spfa,然后一条边在最短路上的条件是dis[e[i].to]==dis[u]+e[i].va,所以每次spfa完之后,dfs出a[i]表示经过i点的最短路的起点数,b[i]表示经过i点的最 ...
- 【BZOJ】【2750】【HAOI2012】Road
最短路+拓扑序DP orz zyf & lyd 统计每条边在多少条最短路径上……其实可以统计 有多少条最短路径经过了x,以及y出发到达任意一个结束点有多少种走法(沿最短路) 我们可以用Dijk ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 608 Solved: 199[Submit][ ...
- BZOJ 2752: [HAOI2012]高速公路(road)( 线段树 )
对于询问[L, R], 我们直接考虑每个p(L≤p≤R)的贡献,可以得到 然后化简一下得到 这样就可以很方便地用线段树, 维护一个p, p*vp, p*(p+1)*vp就可以了 ----------- ...
- 【线段树】BZOJ2752: [HAOI2012]高速公路(road)
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1621 Solved: 627[Submit] ...
随机推荐
- 利用Bootstrap制作一个流行的网页
首先是html承载内容: <!DOCTYPE html> <html lang="zh_CN"> <head> <meta charset ...
- 【CI】系列一:总体环境规划
上周花了点时间把CI环境再次给搞起来了,但是觉得在实体机中总觉得不是很安心,安全性不足,另外没有做备份,安全性.扩展性等都不足,且不好迁移. 因为目前只给了我一台PC及,配置其实也不怎么样.但是却需要 ...
- 个人或者企业怎么进行app开发?开发一款APP应用大概须要多少钱?
App开发.是指专注于手机应用软件开发与服务. App是application的缩写,通常专指手机上的应用软件,或称手机client.另外眼下有非常多在线app开发平台.当然移动互联网时代是全民的移动 ...
- lombok使用总结
前提 这篇文章主要介绍lombok的使用,至于lombok的源码和原理暂不探究,可以看上一篇文章插件化注解处理API去了解lombok的基本原理.参考资料: lombok官网 lombok官方教程-l ...
- Java 中字符串的格式化
1.格式字符串语法 产生格式化输出的每个方法都需要格式字符串 和参数列表.格式字符串是一个String,它可以包含固定文本以及一个或多个嵌入的格式说明符.请考虑以下示例: Calendar c = C ...
- ant-design 实现 搜索功能
1.逻辑代码 list.js /** * 用户列表页 */ import React,{ PureComponent } from 'react' import {connect} from 'rea ...
- socket websocket
1.websocket客户端 websocket允许通过JavaScript建立与远程服务器的连接,从而实现客户端与服务器间双向的通信.在websocket中有两个方法: 1.send() 向远程服务 ...
- Android Studio+SVN配置生成apk文件
Android Studio 是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发 ...
- 【MyBatis学习12】MyBatis中的一级缓存
缓存的作用是减轻数据库的压力,提高数据库的性能的.mybatis中提供了一级缓存和二级缓存,先来看一下两个缓存的示意图: 从图中可以看出: 一级缓存是SqlSession级别的缓存.在操作数据库时 ...
- laravel框架查看执行过的sql语句
1.在routes.php中添加如下语句 Event::listen('illuminate.query', function($sql,$param) { file_put_contents ...