1 条题解

  • 0
    @ 2024-11-30 10:54:52

    #include<bits/stdc++.h> using namespace std; const int N=10010; int f[N],n,m,w[N],v[N],dp[N]; int find(int x) { if(f[x]!=x) f[x]=find(f[x]); return f[x]; }

    int main() { int x; cin>>n>>x>>m; for(int i=1;i<=n;i++) f[i]=i; for(int i=1;i<=n;i++) cin>>w[i]>>v[i]; while(x--) { int a,b; cin>>a>>b; int fa=find(a); int fb=find(b); if(fa!=fb) { f[fa]=fb; w[fb]+=w[fa]; v[fb]+=v[fa]; } } for(int i=1;i<=n;i++) if(f[i]==i){ for(int j=m;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } cout<<dp[m]; return 0; }

    • 1

    信息

    ID
    5513
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    6
    已通过
    5
    上传者