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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

文章目錄

  • 題意:
  • 思路

題意:

給你一張nnn個點mmm條邊的圖,每個點都有一個當前值aia_iai?,目標值bib_ibi?,每次可以選擇一條邊(i,j)(i,j)(i,j),將ai,aja_i,a_jai?,aj?都加上任意一個數,問最終能否將所有aia_iai?都變成目標值。
n,m≤2e5n,m\le2e5n,m2e5

思路

我們設ci=bi?aic_i=b_i-a_ici?=bi??ai?sum=∑cisum=\sum c_isum=ci?,那么當summod2=1sum\bmod 2=1summod2=1的時候一定無解,因為每次修改都是給sumsumsum加上一個可正可負的偶數,如果sumsumsum為奇數的話一定是不能變成000的。
讓后通過手玩可以發現,兩個點之間路徑長度為奇數的時候,可以將兩個數同時加上kkk,兩個點之間為偶數的時候,可以將某個位置加上kkk,某個位置減去kkk。可以想到二分圖染色來將圖分成兩部分。
假設原圖是一個二分圖,那么只能在兩邊的集合中同時加上某個數,所以當兩個集合的∑ci\sum c_ici?不相等的時候,一定無解,否則一定有解。
否則原圖不是一個二分圖,上面已經保證sumsumsum為偶數了,那么答案一定存在。
判斷二分圖可以用并查集。

// Problem: F. Figure Fixing // Contest: Codeforces - Codeforces Round #726 (Div. 2) // URL: https://codeforces.com/contest/1537/problem/F // Memory Limit: 256 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native") //#pragma GCC optimize(2) #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<map> #include<cmath> #include<cctype> #include<vector> #include<set> #include<queue> #include<algorithm> #include<sstream> #include<ctime> #include<cstdlib> #include<random> #include<cassert> #define X first #define Y second #define L (u<<1) #define R (u<<1|1) #define pb push_back #define mk make_pair #define Mid ((tr[u].l+tr[u].r)>>1) #define Len(u) (tr[u].r-tr[u].l+1) #define random(a,b) ((a)+rand()%((b)-(a)+1)) #define db puts("---") using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); } //void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); } //void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f; const double eps=1e-6;int n,m; int p[N]; int a[N],b[N];int find(int x) {return x==p[x]? x:p[x]=find(p[x]); }int main() { // ios::sync_with_stdio(false); // cin.tie(0);int _; scanf("%d",&_);while(_--) {scanf("%d%d",&n,&m);LL sum=0;for(int i=1;i<=n*2;i++) p[i]=i;for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=1;i<=n;i++) {int x; scanf("%d",&x);x-=a[i]; b[i]=x;sum+=x;}for(int i=1;i<=m;i++) {int a,b; scanf("%d%d",&a,&b);p[find(a)]=find(b+n);p[find(a+n)]=find(b);}sum=abs(sum);if(sum%2==1) {puts("NO");continue;} int flag=0;for(int i=1;i<=n;i++) if(find(i)==find(i+n)) flag=1;if(!flag) {sum=0;for(int i=1;i<=n;i++) if(find(1)==find(i)) sum+=b[i]; else sum-=b[i];if(sum==0) puts("YES");else puts("NO");} else puts("YES");}return 0; } /**/

總結

以上是生活随笔為你收集整理的Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。