Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38723 baka24 【BJ】T2 C++ 解答错误 70 406 MS 680 KB 3033 2025-10-21 17:59:44

Tests(15/17):


#include<bits/stdc++.h> using namespace std; #define lll __int128 #define ll long long #define int __int128 #define pb push_back int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;} const int MAXN=130,N=60,Mod1=(ll)1e18+3,Mod2=(ll)1e18+9; int n,m,a[2][MAXN],ans,Mod; vector<int>B[MAXN],R[MAXN]; int Pow(int x,int y){int rt=1;while(y){if(y&1)rt=(lll)rt*x%Mod;x=(lll)x*x%Mod,y>>=1;}return rt;} void add(int &x,int y){x+=y;if(x>=Mod)x-=Mod;} int p[MAXN][MAXN]; int d[2][MAXN][MAXN]; void Geass(bool op){ if(op)Mod=Mod1;else Mod=Mod2; for(int i=1;i<=n;i++)for(int j=1;j<=n<<1;j++)d[op][i][j]=(d[op][i][j]+Mod)%Mod; for(int i=1;i<=n;i++){ int id=0; for(int j=i;j<=n;j++)if(d[op][j][i])id=j; for(int j=i;j<=n<<1;j++)swap(d[op][id][j],d[op][i][j]); int iv=Pow(d[op][i][i],Mod-2); for(int j=i+1;j<=n;j++){ lll tmp=(lll)d[op][j][i]*iv%Mod; for(int o=i;o<=n<<1;o++)add(d[op][j][o],Mod-(lll)tmp*d[op][i][o]%Mod); } } for(int i=n;i>=1;i--){ int tmp=Pow(d[op][i][i],Mod-2); for(int j=1;j<=n<<1;j++)d[op][i][j]=(lll)d[op][i][j]*tmp%Mod; for(int j=i-1;j>=1;j--){ int tmp=d[op][j][i]; for(int o=1;o<=n<<1;o++)add(d[op][j][o],Mod-(lll)tmp*d[op][i][o]%Mod); } } } bool is[MAXN]; int to[MAXN],vs[MAXN],y[MAXN],x[2][MAXN]; vector<int>Gs[MAXN]; void dfs(int u){vs[u]=1;for(auto v:Gs[u])if(!vs[v])dfs(v);} int sol(int v){ for(int i=1;i<=n;i++){ y[i]=(i==1)+(is[i])-(i==v); for(auto o:B[i])y[i]-=is[o]; } for(int o=0;o<2;o++){ if(o)Mod=Mod1;else Mod=Mod2; for(int i=1;i<=n;i++){ x[o][i]=0; for(int j=1;j<=n;j++)add(x[o][i],(lll)(y[j]+Mod)%Mod*d[o][i][j+n]%Mod); } } for(int i=1;i<=n;i++)if(x[0][i]!=x[1][i])return -1; for(int i=1;i<=n;i++)vs[i]=0; dfs(v); for(int i=1;i<=n;i++)if(x[0][i]&&!vs[i])return -1; int res=0; for(int i=1;i<=n;i++)res+=x[0][i]+x[0][i]-is[i]; return res; } void slv(){ n=read(); for(int i=1;i<n;i++)a[0][i]=read(),a[1][i]=read(),B[a[0][i]].pb(i),R[a[1][i]].pb(i); n--; for(int i=1;i<=n;i++){ p[i][i]=2; for(auto o:B[i])p[i][o]--; for(auto o:R[i])p[i][o]--; p[i][n+i]=1; } for(int i=1;i<=n;i++)for(int j=1;j<=n<<1;j++)d[0][i][j]=d[1][i][j]=p[i][j]; Geass(1),Geass(0); m=read(); while(m--){ int v=read(); for(int i=1;i<=n+1;i++)Gs[i].clear(); for(int i=1;i<=n;i++){ char c=getchar();while(c!='R'&&c!='B')c=getchar(); is[i]=c=='R'; if(c=='R')Gs[a[1][i]].pb(i); else Gs[a[0][i]].pb(i); } printf("%lld\n",(ll)sol(v)); } } signed main(){ // freopen("1.in","r",stdin);freopen("1.out","w",stdout); slv(); return 0; }


测评信息: