結果
問題 | No.1364 [Renaming] Road to Cherry from Zelkova |
ユーザー | 夕叢霧香(ゆうむらきりか) |
提出日時 | 2021-01-22 00:37:54 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 969 bytes |
コンパイル時間 | 642 ms |
コンパイル使用メモリ | 80,292 KB |
最終ジャッジ日時 | 2025-01-18 03:13:39 |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 44 WA * 1 |
ソースコード
#include<algorithm> #include<cassert> #include<tuple> #include<iostream> #include<vector> using namespace std; typedef long long lint; typedef vector<int>vi; typedef pair<int,int>pii; typedef tuple<int,int,int>tri; #define rep(i,n)for(int i=0;i<(int)(n);++i) const lint mod=1e9+7; const int N=100001; int n,m; vector<tri>g[N]; //dp1:通り数,dp2:長さの合計 lint dp1[N],dp2[N]; bool inf[N]; int st[N]; void dfs(int v){ if(st[v]==1){ inf[v]=1; st[v]=2; return; } if(st[v]==2){ return; } st[v]=1; dp1[v]=v==n?1:0; for(tri wlk:g[v]){ int w,l,k; tie(w,l,k)=wlk; dfs(w); if(inf[w]){ inf[v]=1; }else{ dp1[v]=(dp1[v]+dp1[w]*k)%mod; dp2[v]=(dp2[v]+dp2[w]*k+dp1[w]*k%mod*l)%mod; } } st[v]=2; } int main(){ cin>>n>>m; rep(_,m){ int a,b,l,k;cin>>a>>b>>l>>k; g[a].push_back(tri(b,l,k)); } dfs(0); if(inf[0]){ cout<<"INF"<<endl; return 0; } cout<<dp2[0]<<endl; }