题意:
n个人有Ai和Bi两个属性,给出m个关系:xi yi表示xi和yi不能配对
i,j两人规定匹配的价值为min (Ai + Bj , Bi + Aj )
回答出每个人跟所有人配对(除开不能和自己匹配的人)的价值总和
题解:
两两匹配
取min (Ai + Bj , Bi + Aj )
假设 Ai + Bj < Bi + Aj
Ai - Aj < Bi -Bj
按照此规则排序即可,在前面的选x,后面的选y
再考虑m个不能匹配的情况
具体实现:先减去m个不能匹配的值,然后再加上所有匹配情况的值
对于第i个数,用它的y与前面的x匹配,用它的x与后面的y匹配
代码:
#include<bits/stdc++.h> #define int long long using namespace std; int n,m; const int maxn=1000006; struct node{ int x,y,id; bool operator<(const node b){ return x-y<b.x-b.y; } }a[maxn]; int ans[maxn]; int sum[maxn],sum2[maxn]; signed main() { cin>>n>>m;