题目

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

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

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


解题思路

N = 100,可以枚举起点和终点,用各种算法枚举两点间所有最短路并累加 答案,复杂度一般为 O(N3)O(N^{3})O(N3)。

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

我在比赛的时候竟然忘了处理相同最短路径,所以WA了。


代码

#include<cstdio>
#include<algorithm>
#include<string>
#include<deque>
#include<cstring>
#define rr register
#define N 1010
using namespace std;
struct node{int y,z,next;}a[N*6];
int n,m,head[N],tot,d[N][N],ans[N],s;
deque<int>q; bool b[N];
inline int read(){int f=0; char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) f=(f<<3)+(f<<1)+c-48,c=getchar();return f;
}
void add(int x,int y,int z){a[++tot]=(node){y,z,head[x]}; head[x]=tot;}
int dfs(int x){int w=d[s][x]&1; ans[x]+=w; for (int i=head[x];i;i=a[i].next){int y=a[i].y,z; if (d[s][x]+a[i].z==d[s][y]) {w+=(z=dfs(y)); ans[x]+=z; }}return w;
}
void spfa(int root){memset(b,0,sizeof(b)); q.push_back(root); d[root][root]=0; b[root]=1; while(!q.empty()){int x=q.front(); q.pop_front(); for (int i=head[x];i;i=a[i].next){int y=a[i].y; if (a[i].z+d[root][x]<d[root][y]){d[root][y]=a[i].z+d[root][x]; if (!b[y]) q.push_back(y),b[y]=1; }}b[x]=0; }
}
int main(){memset(d,125/2,sizeof(d)); scanf("%d%d",&n,&m); int x,y,z; for (int i=1;i<=m;i++) 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 (s=1;s<=n;s++) dfs(s); for (int i=1;i<=n;i++) printf("%d\n",ans[i]); return 0;
}

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

  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

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

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

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

  4. 【五校联考6day2】san

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

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

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

  6. 【五校联考6day2】er

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

  7. 【五校联考6day2】yi

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

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

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

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

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

最新文章

  1. nginx常用功能全揭秘
  2. Promethus+Grafana监控解决方案
  3. 新版ADT出现appcompat_v7的问题
  4. Log4J配置 category, appender,layout
  5. CRM reference product的UI界面
  6. PHP Class中public,private,protected,static的区别
  7. 鸿蒙安装elasticsearch7,安装操作系统_岁寒,然后知松柏之后凋也的技术博客_51CTO博客...
  8. (39)时钟抖动约束
  9. 踏雪点圣火,冰雕刻五环!揭秘全球刷屏的冬奥开幕式黑科技
  10. Python进行时间戳转换为标准时间
  11. python excel怎么将字母后的数字取出来_Excel提取数字、字母、汉字,靠Python一个公式搞定...
  12. php数据传输神器,「curl」PHP中的传输神器
  13. rrpp协议如何修改_产品技术-RRPP技术介绍-新华三集团-H3C
  14. 你真的会用区块链赚钱吗?论区块链的商业思维
  15. C#图像处理:在图片上写字,文字位置居中问题
  16. ipip.net IP位置信誉信息爬取
  17. 学生成绩管理系统设计
  18. 这应该是第一篇写拼多多商业模式的文章吧
  19. 单元测试总结反思_英语单元测试教学反思范文
  20. 如何优雅判断属性值为空

热门文章

  1. 【Python网络蜘蛛 · 6】:明文和密文的转换、json模块的使用、jsonpath模块的使用(附源代码)
  2. Glance 镜像服务
  3. Ribbit Developer Platform介绍。
  4. OSPF你懂多少之经典问题50个
  5. 第十三届蓝桥杯大赛软件赛决赛(Java 大学B组)
  6. matlab画指定角度圆弧,CAD中如何根据指定的角度画圆弧
  7. 会编程的都来玩玩这个游戏吧,看看你的编程水平.
  8. Keyword Spotting (KWS) | Deep Spoken Keyword Spotting: An Overview
  9. 认识Vue源码 (2)-- 手写类Vue框架:Zue
  10. python ADF单位根检验,序列平稳性检验