Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1161字,纯文字阅读大概需要2分钟。
内容图文
![Codeforces 741B Arpa](/upload/InfoBanner/zyjiaocheng/1201/e6f5645ddbd5418e914c1a706a67d352.jpg)
【题目链接】 http://codeforces.com/problemset/problem/741/B
【题目大意】
给出一张图,所有连通块构成分组,每个点有价值和代价,
要么选择整个连通块,要么只能在连通块中选择一个,或者不选,为最大价值
【题解】
首先我们用并查集求出连通块,然后对连通块进行分组背包即可。
【代码】
#include <cstdio> #include <vector> #include <algorithm> #include <cstring> #define rep(i,n) for(int i=1;i<=n;i++) using namespace std; const int N=1010; int dp[N],f[N],n,m,x,y,size,w[N],b[N]; vector<int> v[N]; int sf(int x){return f[x]==x?x:f[x]=sf(f[x]);} int main(){ while(~scanf("%d%d%d",&n,&m,&size)){ rep(i,n)f[i]=i,v[i].clear(); rep(i,n)scanf("%d\n",&w[i]); rep(i,n)scanf("%d\n",&b[i]); rep(i,m){scanf("%d%d",&x,&y);f[sf(x)]=sf(y);} rep(i,n)v[sf(i)].push_back(i); memset(dp,0,sizeof(dp)); rep(i,n)if(sf(i)==i){ for(int j=size;j>=0;j--){ int W=0,B=0; for(int k=0;k<v[i].size();k++){ W+=w[v[i][k]]; B+=b[v[i][k]]; if(j>=w[v[i][k]])dp[j]=max(dp[j],dp[j-w[v[i][k]]]+b[v[i][k]]); }if(j>=W)dp[j]=max(dp[j],dp[j-W]+B); } }printf("%d\n",dp[size]); }return 0; }
原文:http://www.cnblogs.com/forever97/p/Codeforcess741b.html
内容总结
以上是互联网集市为您收集整理的Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses全部内容,希望文章能够帮你解决Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。