Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34242 swzzzz 【S】T4 C++ 编译错误 0 0 MS 0 KB 1245 2024-11-03 21:38:07

Tests(0/0):


#include<bits/stdc++.h> using namespace std; #define N 5005 #define ll long long int t; int n,s; int w[N],p[N],a[N]; vector<int>son[N]; bool vis[N],s_in_ring; vector<int>ring; void find(){ memset(vis,0,sizeof(vis)); int node=1; while (!vis[node]) { vis[node]=1; node=a[node]; } int i=a[node]; ring.push_back(node); if(node==s) s_in_ring=1; while (i!=node) { if(i==s) s_in_ring=1; ring.push_back(i); i=a[i]; } } ll dp(int x){ ll ans=0; for(int i:son[x]){ ans+=max((long long)0,dp(i)); } ans+=w[x]-p[x]; return ans; } int main(){ cin>>t; while (t--) { cin>>n>>s; for(int i=1;i<=n;i++) cin>>w[i]; for(int i=1;i<=n;i++) cin>>p[i]; for(int i=1;i<=n;i++){ cin>>a[i]; son[a[i]].push_back(i); } find(); if(s_in_ring) cout<<dp(s); else { ll tmp=0; ll ans=0; int pos=0; while (ring[pos]!=s) { pos++; } for(int i=pos;ring[(pos+1)%]) } } return 0; }


测评信息: