第1、2、3三个点WA了,下了第一个点,出来是乱码
#include<bits/stdc++.h>
using namespace std;
const int N=8e4+5,M=2e5+5;
int s[M],hd[N],ver[M],nxt[M],w[M],hd1[N],ver1[M],nxt1[M],w1[M],idx,n,m,u,v,val,dfn[N],low[N],mk[N],scc_num,scc_size[N],scc_bel[N],b,res[N],ans;
double ss;
stack<int>stk;
void add(int u,int v,int val,int ss){ver[++idx]=v,w[idx]=val,s[idx]=ss,nxt[idx]=hd[u],hd[u]=idx;}void add1(int u,int v,int val){ver1[++idx]=v,w1[idx]=val,nxt1[idx]=hd1[u],hd1[u]=idx;}
int change(int x,int d){
int cnt=0;
while(x) cnt+=x,x*=d,x/=10;
return cnt;
}
void tarjan(int x){
stk.push(x),mk[x]=1,low[x]=dfn[x]=++idx;
for(int i=hd[x];i;i=nxt[i])
if(!dfn[ver[i]]) tarjan(ver[i]),low[x]=min(low[x],low[ver[i]]);
else if(mk[ver[i]]) low[x]=min(low[x],dfn[ver[i]]);
if(dfn[x]==low[x]){
scc_num++;int y;
do y=stk.top(),scc_bel[y]=scc_num,mk[y]=0,stk.pop();while(x!=y);
}
}queue<int>q;
void top_sort(){
q.push(scc_bel[b]);
while(q.size()){
for(int i=hd1[q.front()];i;i=nxt1[i]){
res[ver1[i]]=max(res[ver1[i]],res[q.front()]+w1[i]+scc_size[ver1[i]]),ans=max(ans,res[ver1[i]]),q.push(ver1[i]);
}q.pop();
}cout<<ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++) scanf("%d%d%d%lf",&u,&v,&val,&ss),add(u,v,val,int(ss*10));
idx=0;
for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
idx=0;
for(int i=1;i<=n;i++){
int scc=scc_bel[i];
for(int j=hd[i];j;j=nxt[j]) if(scc_bel[ver[j]]==scc) scc_size[scc]+=change(w[j],s[j]);else add1(scc,scc_bel[ver[j]],w[j]);
}
for(int i=1;i<=scc_num;i++) res[i]=scc_size[i];
cin>>b,top_sort();
return 0;
}