• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
HaibaraAi
博客园    首页    新随笔    联系   管理    订阅  订阅

Contest2037 - CSU Monthly 2013 Oct (problem I 1326: The contest)

你为何这么叼!

 

1326: The contest

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 221  Solved: 77
[Submit][Status][Web Board]

 

Description

 

  殷犇有很多队员。他们都认为自己是最强的,于是,一场比赛开始了~

  于是安叔主办了一场比赛,比赛有n个题目,每个题目都有一个价值Pi和相对能力消耗Wi,但是有些题目因为太坑不能同时做出来,并且坑题具有传递性。(a和b一起做会坑、b和c会坑则a和c也会坑) ACM队员们想知道,于是他们想知道在能力范围内,它们最多可以作出多少价值的题目。

  聪明的你,告诉我,能帮帮他们吗?

 

Input

 

  第1行两个整数,n,Wmax,k(0<=n,Wmax,k<=1000),其中n为题目总数,Wmax为初始的总能力数.

  接下来n行,为每个题目的Pi,Wi(0<=Pi<=1000,1<=Wi<=10,均为整数)

  再接下来k行,每行2个数字a,b表示a和b会坑

 

Output

 

  对每组数据输出1行为最大可能价值

 

Sample Input

 

3 10 1
100 1
200 5
10 5
1 2

 

Sample Output

 

210

 

HINT

 

  每个测试点1s

 

  CSU_WJQ

 

Source

 

CSU Monthly 2013 Oct.

 
 1 #include <cstdio>
 2 #include <vector>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 #define INF 0x7fffffff
 7 #define maxn 1005
 8 #define mod 1000000007
 9 int p[maxn],w[maxn],sum[maxn],dp[maxn*10];
10 vector<int>g[maxn];
11 int n,m,s;
12 int find(int x){
13     if(x!=sum[x])sum[x]=find(sum[x]);
14     return sum[x];
15 }
16 void search(int x,int y){
17     int fx=find(x),fy=find(y);
18     if(fx!=fy)sum[fy]=fx;
19 }
20 int main(){
21     while(~scanf("%d%d%d",&n,&s,&m)){
22         for(int i=1;i<=n;i++){g[i].clear();sum[i]=i;}
23         memset(dp,0,sizeof dp);
24         for(int i=1;i<=n;i++)scanf("%d%d",&p[i],&w[i]);
25         for(int i=0;i<m;i++){
26             int a,b;
27             scanf("%d%d",&a,&b);
28             search(a,b);
29         }
30         for(int i=1;i<=n;i++)g[find(i)].push_back(i);
31         for(int t=1;t<=n;t++)
32             for(int j=s;j>=0;j--)
33                 for(int i=0;i<g[t].size();i++)
34                     if(j>=w[g[t][i]])dp[j]=max(dp[j],dp[j-w[g[t][i]]]+p[g[t][i]]);
35         printf("%d\n",dp[s]);
36     }
37     return 0;
38 }
View Code 2013-10-05 11:38:03 

 

posted @ 2013-10-05 11:36  HaibaraAi  阅读(110)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3