为什么只能得10分,怎么改都不知道错哪。
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
//#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m;
struct note{
ll to,next;
};
note edge[1000000];
ll head[10000000],t,d[10000000],val[10000000],val2[10000000],r,yy,valuef[10000000],e,r2,r3,xz,xz2;
queue<ll>q;
ll maxpublic(ll k1,ll k2){
if(k2==0)
return k1;
return maxpublic(k2,k1%k2);
}
void insert(ll a,ll ato)
{
edge[++t].next=head[a];
edge[t].to=ato;
head[a]=t;
}
inline ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main()
{
n=read();
m=read();
for(ll i=1;i<=n;i++)
{
r=read();
for(ll j=1;j<=r;j++)
{
e=read();
insert(i,e);d[e]++;
}
val2[i]=1;
valuef[i]=r;
}
for(ll i=1;i<=n;i++)
if(d[i]==0)
{
q.push(i);
val[i]=1;val2[i]=1;
}
while(!q.empty())
{
t=q.front();q.pop();
if(valuef[t]!=0&&val[t]!=0)val2[t]=val2[t]*valuef[t];
else continue;
for(ll i=head[t];i;i=edge[i].next)
{
yy=edge[i].to;
r2=val2[t]*val2[yy]/maxpublic(val2[t],val2[yy]);//最小公倍数
val[t]=val[t]*(r2/val2[t]);//更新分子
val[yy]=val[yy]*(r2/val2[yy])+val[t];d[yy]--;
val2[yy]=r2;//更新分母
r3=maxpublic(val[yy],val2[yy]);
val2[yy]=val2[yy]/r3;
val[yy]=val[yy]/r3;
if(d[yy]==0)q.push(yy);
}
val[t]=0;
val2[t]=1;
}
for(ll i=1;i<=n;i++)
{
if(valuef[i]==0)
{
printf("%d",val[i]);
cout<<" ";
if(val[i]==0&&val2[i]!=0)cout<<0;
else printf("%d",val2[i]);
cout<<endl;
}
}
}