Description
小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一。由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短路。小明有严重的强迫症,认为奇数很不和谐,如果他某一天从一个地点去另一个地点走过的路程是奇数,就会很不爽,但他又不想白白多走路,所以遇到最短路长度是奇数的情况就只能忍了。
如果从某个地点A 到另一个地点B 的最短路径长度为奇数,则称这条最短路径为“不和谐最短路”。如果一条不和谐最短路上包含地点C,则称它为“经过C 的不和谐最短路”。现在请你编程求出对于每个地点,经过它的不同的不和谐最短路数量。两条最短路不同,当且仅当它们途径的地点的序列不同。

Input
第一行两个正整数N;M,含义见题面。
接下来M 行,每行三个正整数Ai;Bi;Li,表示一条无向道路的两端和长度。

Output
 N 行每行一个整数,第i 行表示经过第i 个点的不同的不和谐最短路条数。

Sample Input
4 4
1 4 1
1 2 1
3 4 100
2 3 2

Sample Output
6
4
2
2
样例说明
长度为奇数的最短路有:1 → 2; 1 → 2 → 3; 1 → 4; 2 → 1; 3 → 2 → 1; 4 → 1。
这些路径中四个点的经过次数分别为6, 4, 2, 2。
其它一些路,如1 → 4 → 3 不是最短路,2 → 3 是最短路但长度为2,是偶数。这些路都不计入答案。

Data Constraint
对于50% 的数据,N ≤ 100;
对于全部数据,N ≤ 1000;M ≤ 3000,每条路的长度不超过1000。
保证图连通,无自环重边。

.
.
.
.
.
分析
题目中的图是一般图,结构复杂没有规律。考虑枚举起点并计算单源最短路,保留所有最短路中的边(有向),原图就变成了一个 DAG,可以很方便地在上面进行拓扑排序,DP 等。再考虑长度为奇数的最短路,从一个点断开,一定是一边长度为奇数,另一边长度为偶数。因此可以在 DAG 上 DP 计算从起点到达每个点的奇偶最短路径分别有几条,再逆序 DP 计算从每个点出发的奇偶最短路径条数,在后面的 DP 过程中顺便统计答案。这样对每个起点算一遍。
复杂度 O(NM log N)。

.
.
.
.
.
程序:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;int ans[2000],d[2000],head[2000],pre[2000],n,m,cnt=1;
bool f[2000];
queue<int>q;struct node
{ int to,next,w;
}edge[10000];void add(int x,int y,int z)
{ edge[cnt].next=head[x];edge[cnt].to=y;edge[cnt].w=z;head[x]=cnt++;
}void dfs(int x,int y)
{if (d[x]%2!=0){for (int j=x;j;j=pre[j]) ans[j]++;}for (int i=head[x];i;i=edge[i].next){if (y+edge[i].w==d[edge[i].to]){pre[edge[i].to]=x;dfs(edge[i].to,y+edge[i].w);pre[edge[i].to]=0;}}
}void spfa(int x)
{memset(d,0X7f,sizeof(d));q.push(x);d[x]=false;while (!q.empty()){int u=q.front();f[u]=0;for (int i=head[u];i;i=edge[i].next){if (d[u]+edge[i].w<d[edge[i].to]){d[edge[i].to]=d[u]+edge[i].w;if (f[edge[i].to]==false){q.push(edge[i].to);f[edge[i].to]=true;}    }}q.pop();}dfs(x,0);
}int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=m;i++) {int x,y,z;scanf("%d%d%d",&x,&y,&z);add(x,y,z);add(y,x,z);}for (int i=1;i<=n;i++) spfa(i);for (int i=1;i<=n;i++) printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/YYC-0304/p/10458932.html

【五校联考6day2】san相关推荐

  1. 4246. 【五校联考6day2】san (Standard IO)

    4246. [五校联考6day2]san (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Detailed Limits D ...

  2. [jzoj 4246] 【五校联考6day2】san {spfa+dfs/spfa+拓扑排序+dp}

    题目 Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能 ...

  3. 4246. 【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

  4. jzoj 4246【五校联考6day2】san

    Description 小明经常去N 个地点,其中有些地点之间有直接的无向道路(共M 条这样的道路),可以直接互相到达,这些道路的长短不一.由于小明对这些道路都很熟悉,无论起点和终点在哪里,总能走最短 ...

  5. 【五校联考6day2】er

    Description 小明在业余时间喜欢打电子游戏,不是星际和魔兽这些,是赛尔号一类的游戏.最近小明在玩一款新出的游戏,叫做■■■■■■■■.小明觉得游戏里自己的装备太垃圾了,每次都被大神虐,一怒之 ...

  6. 【五校联考6day2】yi

    Description 小明是■■■星际旅游公司的员工,负责安排飞船,有N 艘飞船由他管理,每艘飞船能容纳的人数都不同.今天小明被要求为一个去锑星的旅游团安排往返的飞船,旅游团有M人,小明希望用最少的 ...

  7. JZOJ 4245【五校联考6day2】er

    吐槽:这题目起的好随便啊 原题 小明在业余时间喜欢打电子游戏,不是星际和魔兽这些,是赛尔号一类的游戏.最近小明在玩一款新出的游戏,叫做■■■■■■■■.小明觉得游戏里自己的装备太垃圾了,每次都被大神虐 ...

  8. 湖南长郡2021高考成绩查询时间,2021年湖南新高考六校、长郡十五校联考时间公布...

    2021年湖南新高考六校.长郡十五校联考时间公布 导读:距离2021年高考时间仅剩不到一百天,各个省份都的高三学子都进入紧张阶段.开始了各种模拟考试.2021届湖南省炎德英才大联考的考试时间也已经公布 ...

  9. jzoj4230. 【五校联考4day1】淬炼神体(B组——Day3)

    jzoj4230. [五校联考4day1]淬炼神体 题目 Description 王仙女将你提供的答案填在<葵花宝典>上,突然,宝典发出耀眼的白光,一股强大的吸力瞬间将仙女吸入宝典中. 一 ...

最新文章

  1. 外中断---汇编学习笔记
  2. hdu 3065 AC自动机
  3. Adaboost算法原理分析和实例+代码(简明易懂)
  4. 编译项目的时候,不会编译依赖的类库项目
  5. vue --- 过滤器、计算、方法、观察属性
  6. 17.3.12---urlparse模块的URL下载
  7. vue-cli3+cordova实现app混合开发
  8. 设计模式_07_单例模式
  9. 190709每日一句 以这样的方式去过每一天,你的生活将永远改变!
  10. vba批量合并指定的sheet_利用VBA实现多个Excel工作簿快速合并方法
  11. NtripShare OpenSource/NtripShare GNSS共享计划 -- JT808终端模拟器源码(四)
  12. 阿里天池课堂Python
  13. 《爱乐之城》月亮与六便士,你选哪个?
  14. python中elif和else的区别_浅谈Python的条件判断语句if/else语句
  15. Furucombo被盗1400万美元启示录:切勿过度授权
  16. 【Java面试题】JavaSE基础之Java面向对象
  17. 价格/价值的本质- 货币现象; 成本的本质 (时间和资源);企业经营的本质最大期望利润(价格,成本,供应量)
  18. PHP+MYSQL新闻系统开发之PHP100视频教程62 修正版
  19. for(j=0,i=0;j6,i10;j++,i++) { k=i+j; } k 值结果是多少?
  20. 怎样把rmvb文件刻录成能在DVD播放机上播放的DVD光盘?

热门文章

  1. 从零开始 Mask RCNN 实战:基于 Win10 + Anaconda 的 MaskRCNN 环境搭建
  2. VTK修炼之道45:图形进阶_vtkPolyData属性数据
  3. 互信息的数学解释以及matlab编程
  4. 关于C++中函数指针的使用(包含对typedef用法的讨论)
  5. bash-shell高级编程--条件判断
  6. 数据结构排序、查找算法
  7. Struts2学习总结一
  8. 数据库连接池技术--BoneCP
  9. 总结java父类构造函数对子类构造函数的影响
  10. 使用google colab运行RNN网络代码报告错误ValueError: Object arrays cannot be loaded when allow_pickle=False