CF(437C)The Child and Toy(貪心)
阿新 • • 發佈:2019-01-08
題意:給出一個無向圖,每個點有點權,操作是一個一個將所有點揪走直至剩下一個點,揪走一個點的代價是剩下點中與其連邊的點的點權和。求完成操作所需花費的最小代價。
解法:貪心的思想,每次將剩餘點中點權最大的點揪出,這樣可以保證每條邊都是會選擇相對小的點權被消耗掉。所以直接輸出所有邊的邊權和即可。
程式碼:
/****************************************************** * author:xiefubao *******************************************************/ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <vector> #include <algorithm> #include <cmath> #include <map> #include <set> #include <stack> #include <string.h> //freopen ("in.txt" , "r" , stdin); using namespace std; #define eps 1e-8 const double pi=acos(-1.0); typedef long long LL; const int Max=10100; const int INF=1000000007; int num[Max]; int n,m; int main() { cout<<390/21.0<<endl; while(scanf("%d%d",&n,&m)==2) { for(int i=1;i<=n;i++) scanf("%d",num+i); int ans=0; for(int i=0;i<m;i++) { int a,b;scanf("%d%d",&a,&b); ans+=min(num[a],num[b]); } cout<<ans<<endl; } return 0; }