日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF1043E Train Hard, Win Easy

發(fā)布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF1043E Train Hard, Win Easy 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

CF1043E Train Hard, Win Easy

題意:

n個人有Ai和Bi兩個屬性,給出m個關(guān)系:xi yi表示xi和yi不能配對
i,j兩人規(guī)定匹配的價值為min (Ai + Bj , Bi + Aj )
回答出每個人跟所有人配對(除開不能和自己匹配的人)的價值總和

題解:

兩兩匹配
取min (Ai + Bj , Bi + Aj )
假設(shè) Ai + Bj < Bi + Aj
Ai - Aj < Bi -Bj
按照此規(guī)則排序即可,在前面的選x,后面的選y
再考慮m個不能匹配的情況
具體實現(xiàn):先減去m個不能匹配的值,然后再加上所有匹配情況的值
對于第i個數(shù),用它的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;for(int i=1;i<=n;i++){scanf("%lld%lld",&a[i].x,&a[i].y);a[i].id=i;}for(int i=1;i<=m;i++){int u,v;scanf("%lld%lld",&u,&v);int h=min(a[u].x+a[v].y,a[u].y+a[v].x);ans[u]-=h;ans[v]-=h;}sort(a+1,a+n+1);int tot=0;for(int i = 1 ; i <= n ; i ++) sum[i] = sum[i - 1] + a[i].x;for(int i = n ; i >= 1 ; i --) sum2[i] = sum2[i + 1] + a[i].y;for(int i = 1 ; i <= n ; i ++) { ans[a[i].id] += sum[i - 1] + (i - 1) * a[i].y;ans[a[i].id] += sum2[i + 1] + (n - i) * a[i].x;}for(int i=1;i<=n;i++)cout<<ans[i]<<" ";return 0; }

總結(jié)

以上是生活随笔為你收集整理的CF1043E Train Hard, Win Easy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。