100分求助
查看原帖
100分求助
1260978
xycsc23楼主2024/12/6 19:18

rt

wa#11

#include<bits/stdc++.h>
using namespace std;
int fa[10005];
pair<int,int> s[10005];
int find(int xx){
    int x=xx;
    while(x^fa[x])x=fa[x];
    while(xx^fa[x])fa[xx]=x, xx=fa[xx];
    return x;
}
int dp[10005];
int main(){
    int n, m, w;
    cin>>n>>m>>w;
    for(int i=1;i<=n;i++)
        fa[i]=i;
    for(int i=1;i<=n;i++)
        cin>>s[i].first>>s[i].second;
    for(int i=1;i<=m;i++){
        int u, v;
        cin>>u>>v;
        int x=find(u), y=find(v);
        if(x==y)
            continue;
        fa[y]=x;
        s[x].first+=s[y].first;
        s[x].second+=s[y].second;
    }
    vector<pair<int,int> > v;
    for(int i=1;i<=n;i++)
        if(fa[i]==i)
            v.push_back(s[i]);
    int ma=INT_MIN;
    for(int i=1;i<=v.size();i++)
        for(int j=w;j>=v[i].first;j--)
            dp[j]=max(dp[j], dp[j-v[i].first]+v[i].second), ma=max(ma, dp[j]);
    cout<<ma;
    return 0;
}
2024/12/6 19:18
加载中...