牛客OI周賽11 普及組 C Colorful

2021-09-25 01:47:39 字數 2266 閱讀 4679

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

小a最近學習了最小生成樹的演算法,覺得非常神奇。

他現在在研究乙個更加神奇的問題

給定nn個點mm條邊的無向圖,每條邊都有乙個顏色,請找到一棵生成樹,滿足顏色的種類盡量少

保證圖聯通

第一行資料組數tt

對於每一組資料,第一行n,m,sn,m,s,分別代表點數,邊數,顏色種類數量

接下來mm行,每行三個整數u,v,cu,v,c,代表一條邊和它的顏色

對於每組資料輸出一行乙個整數表示答案
示例1

複製

1

3 3 2

1 2 1

2 3 1

1 3 2

複製

1
選擇邊(1,2)(1,2)和(2,3)(2,3)
示例2

複製

1

6 8 4

1 2 1

2 3 2

3 4 3

3 5 4

5 6 2

4 6 1

3 5 2

1 3 4

複製

2
對於10%10%的資料,1≤n,m≤101≤n,m≤10

對於40%40%的資料,1≤n,m≤1001≤n,m≤100 , 1≤s≤121≤s≤12

對於另外20%20%的資料,1≤n≤1001≤n≤100,1≤m≤1051≤m≤105,1≤s≤61≤s≤6

對於100%100%的資料,1≤n≤1001≤n≤100,1≤m≤1051≤m≤105,1≤c≤s≤121≤c≤s≤12 , 1≤t≤51≤t≤5

可能有重邊,保證沒有自環

二進位制列舉可以利用的顏色

然後判圖的連通性

根據顏色分類邊,利用並查集判圖的連通性,

各種方法會t

需要預處理每種顏色使得圖的聯通關係

比較好的題吧

#includeusing namespace std;

const int maxn=3e5+46;

struct edge

;inline void read(int &x)

}edge edge[maxn];

int flag[13];

int head[maxn];

int had_gone[105];

int all=0;

int cnt=0;

int mp[105][105][15];

int fa[105];

vector>v[15];

void init()

void add(int x,int y,int col)

void dfs(int n)

}}int fin(int x)

int father[15][105];

int find_col(int col,int x)

int main()

}for(int i=0; i<15; i++)

v[i].clear();

memset(flag,0,sizeof(flag));

//scanf("%d%d%d",&n,&m,&s);

read(n);

read(m);

read(s);

int x,y,col;

for(int i=0; if(cas);

// cout<>=1;

}if(hi>=ans)

continue;

for(int i=0; i<105; i++)

fa[i]=i;

for(int col=1; col<=s; col++)}}

all=1;

// for(int i=1;i<=n;i++)

//

// printf("\n");

for(int i=2; i<=n; i++)

//for(int i=4;i>=1;i--)

// printf("%d",flag[i]);

//cout

//dfs(n);

//printf("%d\n",all);

if(all==n)

}printf("%d\n",ans);

}}

牛客OI周賽9 普及組

目錄a題 b題 c題 小q挺喜歡擼串的,沒錯,字串!你給小q送上了n個字串 對於乙個字串s,如果在小q擼掉 刪除 任意個字元之後,nowcoder 是其子串,則這個字串s是可擼的。小q最近切題切到手軟,想擼串散散心。如果你給他呈現的字串是可擼的,他會很開心,否則他會很桑心。輸入描述 乙個整數n,表示...

牛客OI周賽14 普及組

菜的真實,普及都 ak 不掉.score 100 100 100 0 300 rank 16 看來 pj t1 考字串讀入成鐵上釘釘了?考慮開桶 a 記錄 ascii 為 i 的字元是否出現即可。includeusing namespace std typedef long long ll cons...

牛客OI周賽7 普及組

比賽鏈結 這題非常簡單,純模擬就可以過,不用解釋 如下 includeusing namespace std struct gg a 10005 int main cin m for int i 1 i m i cout 這題目看起來仍然簡單。但最開始我還以為要把所有區間全部列舉一遍。然後我打出暴力...