【题解】

  先建反向图,然后跑拓扑排序求出最长路。

  将所有的点按照最长路从小到大分层,把上一层连向这一层的边按照边权为第一关键字、起点的排名为第二关键字排序。

  按照这个顺序更新这一层的答案,按照这一层每个点被更新的顺序得到这一层的点的排名。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define rg register
#define N 1000010
#define Mod (998244353)
using namespace std;
int n,m,tot,cnt,last[N],in[N],dis[N],q[N],rk[N],ans[N];
struct edge{int to,pre,dis;}e[N];
struct poi{int dis,num;}p[N];
struct rec{int w,rk,from,to;}r[N];
inline int read(){
int k=,f=; char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
return k*f;
}
inline bool cmp(rec a,rec b){
if(a.w==b.w) return a.rk<b.rk;
return a.w<b.w;
}
inline bool cmp2(poi a,poi b){return a.dis<b.dis;}
inline void topu(int x){
int front=,rear=; q[]=x;
while(front<rear){
int now=q[++front];
for(rg int i=last[now],to;i;i=e[i].pre){
to=e[i].to;
dis[to]=max(dis[to],dis[now]+);
if(!(--in[to])) q[++rear]=to;
}
}
}
int main(){
n=read(); m=read();
for(rg int i=;i<=m;i++){
int u=read(),v=read(),d=read(); in[u]++;
e[++tot]=(edge){u,last[v],d}; last[v]=tot;
}
for(rg int i=;i<=n;i++)if(!in[i]&&!dis[i]) topu(i);
for(rg int i=;i<=n;i++){
p[i].num=i;
if(in[i]) p[i].dis=2e9; else p[i].dis=dis[i];
}
sort(p+,p++n,cmp2);
int st=,ed=;
while(st<=n){
tot=;
while(p[ed].dis==p[st].dis&&ed<=n){
int now=p[ed].num;
// printf("now=%d ed=%d\n",now,ed);
for(rg int i=last[now],to;i;i=e[i].pre){
if(dis[to=e[i].to]==dis[now]+) r[++tot]=(rec){e[i].dis,rk[now],now,to};
}
ed++;
}
sort(r+,r++tot,cmp);
for(rg int i=;i<=tot;i++)if(!ans[r[i].to]){
// printf("%d %d %d %d %d\n",r[i].to,r[i].from,r[i].w,ans[r[i].from],ans[r[i].to]);
ans[r[i].to]=(1ll*ans[r[i].from]*+r[i].w*)%Mod;
rk[r[i].to]=++cnt;
}
st=ed;
}
for(rg int i=;i<=n;i++) if(in[i]>) puts("Infinity"); else printf("%d\n",ans[i]%Mod);
return ;
}

最新文章

  1. 安装完成后在命令行运行bash时报错0x80070057
  2. Building a RESTful Web Service
  3. jquery替换所有逗号
  4. Python基础1:if条件判断 break/continue语句
  5. 指定socket文件连接mysql
  6. click和onclick的区别
  7. git提交小结
  8. STL_iterator迭代器(2)——几种迭代器对象的用法
  9. v4l2采集视频和图片源码
  10. 【Linux探索之旅】第一部分第二课:下载Linux,免费的噢
  11. 9.FileWriter 和 BufferWriter
  12. 推荐net开发cad入门阅读代码片段
  13. ivew ui
  14. Eclipse极致性能调优
  15. win2012服务器配置ftp
  16. MVC和Web API 过滤器Filter
  17. JSP页面中的小知识
  18. 第三天:JavaScript的DOM对象和DOM操作HTML
  19. 索引超出了数组界限。 在 System.Collections.Generic.Dictionary`2.Resize
  20. transparent 透明效果

热门文章

  1. C# 读写text 详细讲解
  2. SQL 初级教程学习(六)
  3. Python添加自己的模块路径
  4. 贪心 Codeforces Round #236 (Div. 2) A. Nuts
  5. strings命令的实现 2014-06-02 00:17 355人阅读 评论(0) 收藏
  6. AJPFX学习笔记JavaAPI之String类
  7. poj1930 Dead Fraction
  8. php中读取以及写入文件的方法总结
  9. 如何理解JavaScript的单线程
  10. addslashes,stripslashes