• JXNU acm选拔赛 涛涛的Party


    涛涛的Party

    Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
    Total Submission(s) : 21   Accepted Submission(s) : 8

    Font: Times New Roman | Verdana | Georgia

    Font Size: ← →

    Problem Description

    涛神因为极强,并且特别帅,所以拥有很多美女的联系方式,每个美女都有自己的食量以及魅力值,大家都知道,物以类聚,人以群分,朋友的朋友就是自己的朋友,所以美女一般都是有自己的美女朋友圈,而且这些美女特别团结,如果她的朋友有没有被邀请的她就不会答应邀请。涛涛想办一个party,但是他只准备了w kg的食物,他想获得最大的美女魅力值,不知道怎么邀请美女,于是他去问你,你能告诉他,他能获得的美女魅力数是多少吗

    Input

    数据有多组,第一行输入n,m和w(1≤n≤1000,0≤m≤min(n*(n-1)/2,10^5),1≤w≤1000);第二行输入n个整型变量w1,w2,...,wn(1≤wi≤1000)代表美女i的食量;第三行输入n个整型变量b1,b2,...,bn(1≤bi≤106)代表美女i的魅力值;接下来的m行输入两个数x和y(1≤xi,yi≤n,xi≠yi),代表x和y是朋友

    Output

    输出涛涛能获得的最大魅力值

    Sample Input

    3 1 5
    3 2 5
    2 4 2
    1 2
    4 2 11
    2 4 6 6
    6 4 2 1
    1 2
    2 3
    

    Sample Output

    6
    1
    
    
    
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 #include<algorithm>
     5 using namespace std;
     6 struct Node{
     7     int wei,mm,fa;
     8 }a[1005];
     9 int sum1[1005];
    10 int sum2[1005];
    11 int Find(int x)
    12 {
    13     if(x==a[x].fa) return x;
    14     else{
    15         a[x].fa=Find(a[x].fa);
    16         return a[x].fa;
    17     }
    18 }
    19 void join(int x,int y)
    20 {
    21     int fx=Find(x),fy=Find(y);
    22     if(fx!=fy)
    23     {
    24         a[fy].fa=fx;
    25     }
    26 }
    27 int main()
    28 {
    29     int n,m,w;
    30     while(~scanf("%d%d%d",&n,&m,&w))
    31     {
    32         for(int i=1;i<=n;i++){
    33             a[i].fa=i;
    34             scanf("%d",&a[i].wei);
    35         }
    36         for(int i=1;i<=n;i++){
    37             scanf("%d",&a[i].mm);
    38         }
    39         int xx,yy;
    40         for(int i=0;i<m;i++)
    41         {
    42             scanf("%d%d",&xx,&yy);
    43             join(xx,yy);
    44         }
    45         memset(sum1,0,sizeof(sum1));
    46         memset(sum2,0,sizeof(sum2));
    47         for(int i=1;i<=n;i++)//统计各个朋友圈的魅力值和耗的粮食
    48         {
    49             int ff=Find(i);
    50             sum1[ff]+=a[i].mm;
    51             sum2[ff]+=a[i].wei;
    52         }
    53         int dp[1005];
    54         memset(dp,0,sizeof(dp));
    55         for(int i=1;i<=n;i++)
    56         {
    57             for(int j=w;j>=sum2[i];j--)
    58             {
    59                 dp[j]=max(dp[j],dp[j-sum2[i]]+sum1[i]);
    60             }
    61         }
    62         cout<<dp[w]<<endl;
    63     }
    64     return 0;
    65 }
    
    
    
    
    
    
    
  • 相关阅读:
    迭代器相关整理
    闭包的功能举例
    函数参数相关整理
    python中进制转换及IP地址转换
    dD Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual
    2D and 3D Linear Geometry Kernel ( Geometry Kernels) CGAL 4.13 -User Manual
    Monotone and Sorted Matrix Search ( Arithmetic and Algebra) CGAL 4.13 -User Manual
    Algebraic Kernel ( Arithmetic and Algebra) CGAL 4.13 -User Manual
    数论中的环概念
    QT的配置及目录结构
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/7258945.html
Copyright © 2020-2023  润新知