程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 將邊權拆成兩半加到它所關聯的兩個點的點權中即可

將邊權拆成兩半加到它所關聯的兩個點的點權中即可

編輯:C++入門知識

1005:


若沒有邊權,則對點權從大到小排序即可。。

考慮邊,將邊權拆成兩半加到它所關聯的兩個點的點權中即可。

。。因為當兩個人分別選擇不同的點時,這一權值將互相抵消。

智商是硬傷啊

 

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
double w[100001];
int main()
{
    //freopen("1005.in","r",stdin);
    int n,m,i,a,c,b;
    while(~scanf("%d%d",&n,&m))
    {
        memset(w,0,sizeof(w));
        for(i=1;i<=n;i++)scanf("%lf",&w[i]);
        for(i=1;i<=m;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            w[a]+=1.0*c/2;
            w[b]+=1.0*c/2;
        }
        double s;
        s=0;
        sort(w+1,w+n+1);
        for(i=n;i>=1;i-=2)
        {
            s+=w[i]-w[i-1];
        }
        printf("%.0lf\n",s);
    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved