1. 程式人生 > >百度之星1002 度度熊的王國戰略

百度之星1002 度度熊的王國戰略

超級 class mes 力量 can nbsp 是把 關系 cout

Problem Description

度度熊國王率領著喵哈哈族的勇士,準備進攻嘩啦啦族。

嘩啦啦族是一個強悍的民族,裏面有充滿智慧的謀士,擁有無窮力量的戰士。

所以這一場戰爭,將會十分艱難。

為了更好的進攻嘩啦啦族,度度熊決定首先應該從內部瓦解嘩啦啦族。

第一步就是應該使得嘩啦啦族內部不能同心齊力,需要內部有間隙。

嘩啦啦族一共有n個將領,他們一共有m個強關系,摧毀每一個強關系都需要一定的代價。

現在度度熊命令你需要摧毀一些強關系,使得內部的將領,不能通過這些強關系,連成一個完整的連通塊,以保證戰爭的順利進行。

請問最少應該付出多少的代價。

Input

本題包含若幹組測試數據。

第一行兩個整數n,m,表示有n個將領,m個關系。

接下來m行,每行三個整數u,v,w。表示u將領和v將領之間存在一個強關系,摧毀這個強關系需要代價w

數據範圍:

2<=n<=3000

1<=m<=100000

1<=u,v<=n

1<=w<=1000

Output

  對於每組測試數據,輸出最小需要的代價。

Sample

Sample Input
2 1
1 2 1
3 3
1 2 5
1 2 4
2 3 3
Sample Output
1
3

題意:

  給出一個圖,破壞圖中的某些邊,將一個點分離出去。破壞每條邊的代價是與這個點相連的邊的權值和,問要將此圖中的任意一點分離出去,最小代價是多少。(語言表達有點問題,湊合看吧)

思路:

  這才是真正的簽到題,不過出題率有點低,估計很多dalao們直接去做DP,做完之後就沒看別的,然後後面的看到DP出題率最高,出題數也最多就直接去搞DP了,然後都忽略了這個大水題。   明確題意之後就特別簡單了,直接定義一個數組記錄與每個點相連的邊的權值和,然後遍歷找最小就行了。     我猜坑點在是重邊情況,如果是有重邊的話,必須兩條邊都破壞才能分離出這個點,所以重邊是需要重復計算的。還有可能就是對題意理解不太明確,要求是一個點孤立,並不是將圖分成兩個部分。比如1和2之間權值是10,2和3之間權值是5,3和4之間權值是10,那麽最小代價應該是10,將第一個點或者最後一個點分離出去,並不是把2和3之間那條邊破壞。
  可能出題率低在這裏吧。其他是真的沒有什麽坑。代碼也超級簡單。

代碼:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string.h>
using namespace std;
int main()
{
    int m,n;
    int sum[10000];
    while(~scanf("%d%d",&n,&m))
    {
        memset(sum,0,sizeof(sum));
        for(int i=1; i<=m; i++)
        {
            int a,b,c;
            cin>>a>>b>>c;
            if(a==b)
                continue;
            sum[a]+=c,sum[b]+=c;
        }
        sort(sum+1, sum+n+1);
        cout<<sum[1]<<endl;
    }
    return 0;
}

百度之星1002 度度熊的王國戰略