時間限制: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/printf("%d")
//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 這題目看起來仍然簡單。但最開始我還以為要把所有區間全部列舉一遍。然後我打出暴力...