题目连接:
贪心,每条绳子都是须要割断的,那就先割断最大值相应的那部分周围的绳子。
#include#include #include #include using namespace std;const int MAX_N = 1000 + 10;int G[MAX_N][MAX_N];struct Value{ int val; int i;};int cmp(Value a, Value b){ return a.val > b.val;}Value value[MAX_N];int value1[MAX_N];int main(){ memset(G, 0, sizeof(G)); int n, m; scanf("%d%d", &n, &m); for(int i = 1;i <= n; i++) { scanf("%d", &value[i].val); value1[i] = value[i].val; value[i].i = i; } int u, v; for(int i = 0; i < m; i++) { scanf("%d%d", &u, &v); G[u][v] = G[v][u] = 1; } sort(value + 1, value + n + 1, cmp); int sum = 0; int b; for(int i = 1; i <= n; i++) { b = value[i].i; for(int j = 1; j <= n; j++) { if(G[b][j]) { sum += value1[j]; G[b][j] = G[j][b] = 0; } } } printf("%d\n", sum); return 0;}