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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CF1616F Tricolor Triangles(构造、高斯消元)

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF1616F Tricolor Triangles(构造、高斯消元) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解析

關鍵性質:三元環合法等價于邊權和模3等于0。

還有一個常識:三元環的級別是O(mm)O(m\sqrt m)O(mm?)
證明:
三個點度數都大于 m\sqrt mm? 的點不超過Cm3=mmC_{\sqrt m}^3=m\sqrt mCm?3?=mm? 個。
如果含有度數小于m\sqrt mm? 的點,考慮從這樣的點伸出去的每條邊,最多和 m\sqrt mm? 條邊配對成環,所以也不超過 mmm\sqrt mmm? 個。

所以本題暴力找出所有的三元環高斯消元就行了,常數很小。
看題解學會了一直因為慣性懶得學的高斯約旦法。

暴力高消確實挺不容易想到的,總會往神仙構造那邊想。
但第一個關鍵性質沒有看出來不太應該。

代碼

//luogu #include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define debug(...) fprintf(stderr,__VA_ARGS__) #define ok debug("OK\n") using namespace std;const int N=2e5+100; const int inf=1e9; const int mod=998244353; inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-')f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f; }int n,m; int id[80][80]; int a[5050][270],num; int ans[270]; void print(int n,int m){for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) printf("%d ",a[i][j]);puts("");}puts(""); }signed main(){#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);#endifint T=read();while(T--){num=0;memset(id,0,sizeof(id));memset(a,0,sizeof(a));memset(ans,0,sizeof(ans));n=read();m=read();for(int i=1;i<=m;i++){int x=read(),y=read(),w=read();id[x][y]=id[y][x]=i;if(w!=-1){++num;a[num][i]=1;a[num][m+1]=w;} }for(int x=1;x<=n;x++){for(int y=x+1;y<=n;y++){for(int z=y+1;z<=n;z++){if(id[x][y]&&id[y][z]&&id[x][z]){++num;a[num][id[x][y]]=a[num][id[x][z]]=a[num][id[y][z]]=1;a[num][m+1]=0;}}}}//printf("num=%d\n",num);int id=0;//print(num,m+1);for(int i=1;i<=m;i++){int pos=0;for(int j=id+1;j<=num;j++){if(a[j][i]){pos=j;break;}}if(!pos) continue;++id;swap(a[id],a[pos]);if(a[id][i]==2){for(int j=i;j<=m+1;j++) a[id][j]=(3-a[id][j])%3;}for(int j=1;j<=num;j++){if(j!=id&&a[j][i]){//printf("j=%d\n",j);int x=a[j][i];for(int k=i;k<=m+1;k++){a[j][k]=(a[j][k]-x*a[id][k]+6)%3;//printf(" k=%d %d*%d\n",k,a[j][i],a[id][k]);}}}//print(num,m+1);}bool flag=0;for(int i=id+1;i<=num;i++){if(a[i][m+1]){puts("-1");flag=1;break;}}if(flag) continue;for(int i=1;i<=id;i++){for(int p=1;p<=m;p++){if(a[i][p]){ans[p]=a[i][m+1];break;}}}for(int i=1;i<=m;i++) printf("%d ",ans[i]?ans[i]:3);puts("");}return 0; } /* */

總結

以上是生活随笔為你收集整理的CF1616F Tricolor Triangles(构造、高斯消元)的全部內容,希望文章能夠幫你解決所遇到的問題。

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