求大佬帮忙看看,读入有问题
查看原帖
求大佬帮忙看看,读入有问题
238448
zhanghenghui楼主2020/11/28 09:29

样例全过,0pt,下载的数据全部读入之后还能读,求调读入部分/kk

全部代码:

#include <bits/stdc++.h>
using namespace std;
const int Maxn=5000001,mod=998244353;
inline long long read()
{
  long long x=0;
  char c=getchar();
  for(; c<'0'  || c>'9';  c=getchar());
  for(; (c<='9') && (c>='0'); c=getchar())
    x=(x<<3)+(x<<1)+c-'0';
  return x;
}
struct fluas
{
  long long lei,c,k,p,mul,sum;
} han[Maxn];
struct popw
{
  long long next,v;
} e[Maxn];
long long head[Maxn],cnt,ind[Maxn];
void addedge(int u,int v)
{
  cnt++;
  e[cnt].v=v;
  e[cnt].next=head[u];
  head[u]=cnt;
  ind[v]++;
}

long long n,m,ccnt,q,a[Maxn],dfn[Maxn],f[Maxn];
void Topo()
{
  queue<int> Q;
  for(int i=1; i<=m; i++)
  {
    if(ind[i]==0)
      Q.push(i);
    while(!Q.empty())
    {
      int x=Q.front();
      Q.pop();
      dfn[++ccnt]=x;
      for(int i=head[x]; i; i=e[i].next)
      {
        ind[e[i].v]--;
        if(!ind[e[i].v])
          Q.push(e[i].v);
      }
    }
  }
}
void getmul()
{
  for(int i=m; i; i--)
  {
    int x=dfn[i];
    for(int j=head[x]; j; j=e[j].next)
    {
      han[x].mul=(han[x].mul*han[e[j].v].mul)%mod;
    }
  }
}
void getsum()
{
  for(int i=1; i<=m; i++)
  {
    int x=dfn[i];
    long long now=1;
    for(int j=head[x]; j; j=e[j].next)
    {
      han[e[j].v].sum=(han[e[j].v].sum+han[x].sum*now)%mod;
      now*=han[e[j].v].mul;
    }

  }
}
int main()
{
  scanf("%lld",&n);
  for(int i=1; i<=n; i++)
    scanf("%lld",&a[i]);
  scanf("%lld",&m);
  for(int i=1; i<=m; i++)
  {
    scanf("%lld",&han[i].lei);
    if(han[i].lei==1)
    {
    scanf("%lld",&han[i].p),scanf("%lld",&han[i].k);
      han[i].mul=1;
    }
    else if(han[i].lei==2)
    {
      scanf("%lld",&han[i].mul);
    }
    else
    {
      han[i].mul=1;
    scanf("%lld",&han[i].c);
      for(int j=1,x; j<=han[i].c; j++)
      {
        scanf("%d",&x);
        addedge(i,x);
      }
    }
  }
  Topo();
  getmul();
  scanf("%lld",&q);
  long long now=1;
  for(int i=1; i<=q; i++)
    scanf("%lld",&f[i]);
  for(int i=q; i; i--)
  {
    int x=f[i];
    han[x].sum=(han[x].sum+now)%mod;
    now*=han[x].mul;
  }
  getsum();
  for(int i=1; i<=n; i++)
    a[i]*=now%mod;
  for(int i=1; i<=m; i++)
  {
    if(han[i].lei==1)
    {
      a[han[i].p]=(a[han[i].p]+han[i].sum*han[i].k);
    }
  }
  for(int i=1; i<=n; i++)
    cout<<a[i]<<' ';
  return 0;
}

部分代码:

inline long long read()
{
  long long x=0;
  char c=getchar();
  for(; c<'0'  || c>'9';  c=getchar());
  for(; (c<='9') && (c>='0'); c=getchar())
    x=(x<<3)+(x<<1)+c-'0';
  return x;
}
scanf("%lld",&n);
  for(int i=1; i<=n; i++)
    scanf("%lld",&a[i]);
  scanf("%lld",&m);
  for(int i=1; i<=m; i++)
  {
    scanf("%lld",&han[i].lei);
    if(han[i].lei==1)
    {
    scanf("%lld",&han[i].p),scanf("%lld",&han[i].k);
      han[i].mul=1;
    }
    else if(han[i].lei==2)
    {
      scanf("%lld",&han[i].mul);
    }
    else
    {
      han[i].mul=1;
    scanf("%lld",&han[i].c);
      for(int j=1,x; j<=han[i].c; j++)
      {
        scanf("%d",&x);
        addedge(i,x);
      }
    }
  }
2020/11/28 09:29
加载中...