• $Vijos P1250$


    背包?
    跑完并查集 分组背包完事

    #include <bits/stdc++.h>
    #define rep(i,j,n) for(register int i=j;i<=n;i++)
    #define Rep(i,j,n) for(register int i=j;i>=n;i--)
    #define low(x) x&(-x)
    using namespace std ;
    typedef long long LL ;
    const int inf = INT_MAX >> 1 ;
    inline LL In() { LL res(0) , f(1) ; register char c ;
    #define gc c = getchar()
    	while(isspace(gc)) ; c == '-' ? f = - 1 , gc : 0 ;
    	while(res = (res << 1) + (res << 3) + (c & 15) , isdigit(gc)) ;
    	return res * f ;
    #undef gc
    }
    
    int n , m , k ;
    const int N = 1000 + 5 ;
    int p[N] , w[N] ;
    int fa[N] ;
    int cnt[N] ;
    int V[N][N] ;
    int W[N][N] ;
    int dp[N] ;
    
    inline int find(int x) {
    	return fa[x] == x ? fa[x] : fa[x] =find(fa[x]) ;
    }
    inline void merge(int x,int y) {
    	fa[find(x)] = find(y) ;
    }
    
    inline void Ot() {
    	memset(V,0,sizeof(V)) ;
    	memset(W,0,sizeof(W)) ;
    	n = In() , m = In() , k = In() ;
    	rep(i,1,n) fa[i] = i ;
    	rep(i,1,n) p[i] = In() , w[i] = In() ;
    	rep(u,1,k) merge(In() , In()) ;
    	rep(i,1,n) {
    		int q = find(i) ;
    		V[q][++cnt[q]] = p[i] ;
    		W[q][cnt[q]] = w[i] ;
    	}
    	rep(i,1,n) Rep(j,m,0) rep(u,1,cnt[i])
    	W[i][u] <= j ? dp[j] = max(dp[j] , dp[j-W[i][u]]+V[i][u]) : 0 ;
    	cout << dp[m] << endl ;
    }
    signed main() {
    	return Ot() , 0 ;
    }
    
  • 相关阅读:
    git提交代码
    python把&#DDDDDD转换为中文
    mac下载安装airtest
    mac安装指定版本的python
    python操作habse
    pyspark操作数据库
    Scrapy_redis爬虫项目
    python实现对列表元素是字典的排序
    postman使用
    图书推荐
  • 原文地址:https://www.cnblogs.com/qf-breeze/p/10638229.html
Copyright © 2020-2023  润新知