Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33654 22fhq 【S】block C++ 运行出错 20 99 MS 7912 KB 2403 2024-10-18 13:27:21

Tests(4/20):


#include<bits/stdc++.h> using namespace std; #define int long long int n,m; int v[100005]; vector<int>e[100005]; struct con{ int u,v; }c[25]; int dp[100005]; namespace subtask1{ bool choose[25]; int ans=0; int tot,dfn[25]; void getdfn(int p){ if(!choose[p])return ; dfn[p]=++tot; for(int x:e[p]){ getdfn(x); } return ; } bool chk(){ tot=0; int mn=1; for(int i=1;i<=n;i++){ dfn[i]=0; if(!choose[i])continue; if(dp[i]<dp[mn]||!choose[mn])mn=i; } getdfn(mn); for(int i=1;i<=n;i++){ if(choose[i]&&!dfn[i])return 0; } for(int i=1;i<=m;i++){ if(!choose[c[i].u]||!choose[c[i].v])continue; if(abs(dfn[c[i].u]-dfn[c[i].v])==1)return 0; } return 1; } void dfs(int p,int sum){ if(p>n){ if(sum>ans&&chk())ans=sum; return; } choose[p]=1; dfs(p+1,sum+v[p]); choose[p]=0; dfs(p+1,sum); } void slv(){ dfs(1,0); cout<<ans<<endl; } } namespace subtask2{ bool vis[100005]; int sum[100005],ans; void dfs(int p){ vis[p]=1; for(int x:e[p]){ dfs(x); sum[p]+=sum[x]; } } void slv(){ for(int i=1;i<=m;i++){ e[c[i].v].erase(find(e[c[i].v].begin(),e[c[i].v].end(),c[i].u)); } for(int i=1;i<=n;i++){ vis[i]=0; sum[i]=v[i]; } dfs(1); ans=sum[1]; for(int i=1;i<=m;i++){ dfs(c[i].u); ans=max(ans,sum[c[i].u]); } cout<<ans<<endl; } } void dfs(int p){ for(int x:e[p]){ dp[x]=dp[p]+1; dfs(x); } } signed main(){ //freopen("block.in","r",stdin); //freopen("block.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++)cin>>v[i]; for(int i=1;i<=n;i++){ int num; cin>>num; while(num--){ int x; cin>>x; e[i].push_back(x); } } for(int i=1;i<=m;i++){ cin>>c[i].v>>c[i].u; } dfs(1); if(n<=20)subtask1::slv(); else subtask2::slv(); return 0; }


测评信息: