zoukankan      html  css  js  c++  java
  • noip模拟 市长选举

    题目描述

    利贝尔王国的卢安市因为前段时间的市长被捕事件,导致没有市长管理城市。他们需要一个新的市长。

    竞选的人有两位。一位是诺曼,因支持旅游业而受到支持者的拥护。一位是波尔多斯,代表的是卢安的传统行业——渔业。但是他们的支持者在卢安的伦格兰德大桥吵起来了!

    现在,他们每个人都与几个不同的人进行争吵。身为游击士的你,需要调解这场争斗。

    参与吵架的共有n人,每个人都有一个倔强指数,第i个人的倔强指数是ai。你可以认为他们的每个争吵都只发生在两个人之间。你需要按照一定顺序把每一个人拉出这个“战场”。拉出一个人的代价是当前与他正在进行争吵的所有人的倔强指数之和,且拉出某个人以后,所有原来与他有关的吵架可以认为已经停止。

    输入

    第一行两个整数n m。

    第二行n个整数,第i个整数表示ai。

    下面m行每行两个整数pi pj,表示pi pj之间发生了一次争吵。

    输出

    一行一个整数,表示完成任务的最小代价。

    样例输入

    4 3
    10 20 30 40
    1 4
    1 2
    2 3

    样例输出

    40

    提示

    对于20%的数据,n<=9,m<=10。

    对于50%的数据,n<=15,m<=20。

    对于80%的数据,n<=1000,m<=1,000,000。

    对于100%的数据,n<=1,000,000,m<=1,000,000。

    对于100%的数据,0<=ai<=1000,输入保证没有人与自己吵架,保证数据随机生成。

    这题就一句话贪心

    而缺这题贪心贪的十分巧妙(正

    我们可以将争吵的人构成一个图

    我们发现这个图每条边最终都要被删去,才能完成任务

    所以每条边的权值尽量小就可以了

    那就是这条边所连两个点较小的点权值

    最后把所有边权加一起就对了

    #include<iostream> 
    #include<cstring> 
    #include<cstdio> 
    #include<algorithm> 
    using namespace std; 
    int a[1000001]; 
    int main() 
    { 
        int i,j; 
        int n,m; 
        long long ans=0; 
        scanf("%d%d",&n,&m); 
        for(i=1;i<=n;i++) 
        { 
            scanf("%d",&a[i]); 
        } 
        int x,y; 
        for(i=1;i<=m;i++) 
        { 
            scanf("%d%d",&x,&y); 
            ans+=min(a[x],a[y]); 
        } 
        cout<<ans; 
    }
  • 相关阅读:
    Day8 类的继承
    Day7 访问权限
    javascript性能优化
    JavaScript 基础:Babel 转译 class 过程窥探
    HTML5之新增的元素和废除的元素 (声明:内容节选自《HTML 5从入门到精通》)
    谈起音视频,前端能做些什么
    Safari不能保存session的处理方法
    一篇关于BEM命名规范
    H5新人福音~零配置搭建现代化的前端工程
    2018年,最经典的26个JavaScript面试题和答案!
  • 原文地址:https://www.cnblogs.com/ashon37w/p/7045699.html
Copyright © 2011-2022 走看看