0分求调!(玄关)
查看原帖
0分求调!(玄关)
1533163
C18924990244楼主2025/6/21 10:46

全部RE!!全部RE!!

这是本蒟蒻的RE代码,请各位大佬帮我康康:这是本蒟蒻的RE代码,请各位大佬帮我康康:

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int MOD=998244353,N=5e5+5,STEPS=200;
int n,m,a[N],t0=-1;
long long k;
vector<int>initial,adj[N],in_degree(N);
vector<long long>f(N),s(N),res(N),c(n),d(n);
int main(){
	scanf("%d%lld%d",&n,&k,&m);
    initial.resize(m);
    for(int i=0;i<m;i++){
        scanf("%d",&initial[i]);
        initial[i]--;
    }for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        adj[i].resize(a[i]);
        for(int j=0;j<a[i];j++){
            scanf("%d",&adj[i]);
            adj[i][j]--;
        }
    }for(int i=0;i<n;i++)
		for(int j:adj[i])
			in_degree[j]++;
    for(int v:initial)f[v]=1;
    bool all_positive;
    for(int t=1;t<=min((long long)STEPS,k);t++){
        vector<long long>new_f(n);
        all_positive=1;
        for(int v:initial)new_f[v]+=1;
        for(int i=0;i<n;i++)
			if(f[i]>0&&t<k)
				for(int j:adj[i])
					new_f[j]++;
        for(int i=0;i<n;i++)
			if(f[i]>0)res[i]=(res[i]+a[i]+f[i])%MOD;
        f=new_f;
        bool flag=1;
        for(int i=0;i<n;i++){
            if(f[i]==0){
            	flag=0;
				break;
			}
		}if(flag){
			t0=t;
			break;
		}
    }if(t0!=-1&&t0<k){
        fill(s.begin(),s.end(),0);
        f.assign(n,0);
        for(int v:initial)
            f[v]=1;
        for(int t=1;t<=t0;t++){
            vector<long long>new_f(n);
            for(int v:initial)
                new_f[v]++;
            for(int i=0;i<n;i++)
                if(f[i]>0&&t<k)
                    for(int j:adj[i])
                        new_f[j]++;
            for(int i=0;i<n;i++)
                if(f[i]>0)s[i]++;
            f=new_f;
        }for (int i=0;i<n;i++){
            d[i]=in_degree[i];
            c[i]=(initial.end()!=find(initial.begin(),initial.end(),i))?1:0;
            for(int j=0;j<n;j++)
				for(int x:adj[j])
					if(x==i)c[i]+=s[j];
        }long long K=k-t0;
        for(int i=0;i<n;i++){
            long long term=0;
            term=(a[i]+c[i])%MOD;
            term=term*(K%MOD)%MOD;
            long long temp=(K%MOD)*((K-1)%MOD)%MOD;
            temp=temp*((MOD+1)/2)%MOD;
            temp=temp*(d[i]%MOD)%MOD;
            term=(term+temp)%MOD;
            res[i]=(res[i]+term)%MOD;
        }
    }for(int i=0;i<n;i++)
		printf("%lld ",res[i]);
    return 0;
}
2025/6/21 10:46
加载中...