Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
33762 baka24 【S】block C++ 通过 100 101 MS 40604 KB 2232 2024-10-21 21:24:30

Tests(20/20):


#include<bits/stdc++.h> using namespace std; #define ll long long #define ll long long #define LD long double #define it __int128 #define lson t[x].ls #define rson t[x].rs #define pii pair<int,int> #define fr first #define sc second #define mk make_pair #define pb push_back #define x1 gczkaioi #define y1 lylakioi #define yjbakioi true #define popcnt __builtin_popcount #define inx(u) int I=h[u],v=edge[I].v;I;I=edge[I].nx,v=edge[I].v #define inw(u) int I=h[u],v=edge[I].v,w=edge[I].w;I;I=edge[I].nx,v=edge[I].v,w=edge[I].w int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}x=c-'0';c=getchar();while(c<='9'&&c>='0'){x*=10;x+=c-'0';c=getchar();}return x*f;} // int read(){int x;scanf("%lld",&x);return x;} const int MAXN=100010,MAXM=4010,N=44,base=131,Mod=1000000007,Mod2=999911659,B=1000; // int Pow(int x,int y){int rt=1;while(y){if(y&1)rt=rt*x%Mod;x=x*x%Mod,y>>=1;}return rt;} // int Pow(int x,int y,int p){int rt=1;while(y){if(y&1)rt=rt*x%p;x=x*x%p,y>>=1;}return rt;} // string ejz(int x){string s="";for(int i=0;i<5;i++)s+=x&(1<<i)?"1":"0";return s;} // struct Edge{int v,nx;}edge[MAXN<<1];int h[MAXN],CNT=1;void add_side(int u,int v){edge[++CNT]={v,h[u]};h[u]=CNT;edge[++CNT]={u,h[v]};h[v]=CNT;} int n,x,y,k,m,a[MAXN],p[N],q[MAXN];ll f[MAXN][N],ans; const ll inf=1000000000000000000; vector<int>G[MAXN]; map<pii,bool>mp; void dfs(int u){ for(int i=0;i<=m;i++)f[u][i]=-inf; f[u][q[u]]=a[u]; for(auto v:G[u]){ dfs(v); ll mx=-inf; for(int i=0;i<=m;i++)if(!mp.count(mk(p[i],v)))mx=max(mx,f[u][i]); for(int i=0;i<=m;i++)f[u][i]=max(f[u][i],mx+f[v][i]),ans=max(ans,f[u][i]); } } void slv(){ n=read(),m=read(); for(int i=1;i<=n;i++)a[i]=read(); for(int i=1;i<=n;i++){ int tmp=read(); while(tmp--)G[i].pb(read()); } for(int i=1;i<=m;i++){ int u=read(),v=read(); p[i*2-1]=u,p[i*2]=v; mp[mk(u,v)]=mp[mk(v,u)]=1; } m<<=1; sort(p+1,p+m+1); m=unique(p+1,p+m+1)-p-1; for(int i=1;i<=m;i++)q[p[i]]=i;//,cout<<p[i]<<" ";cout<<endl; dfs(1); printf("%lld",ans); } signed main(){ slv(); return 0; }


测评信息: