結果
問題 |
No.3087 University Coloring
|
ユーザー |
![]() |
提出日時 | 2025-05-22 16:30:28 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 91 ms / 2,000 ms |
コード長 | 1,167 bytes |
コンパイル時間 | 3,196 ms |
コンパイル使用メモリ | 198,320 KB |
実行使用メモリ | 9,428 KB |
最終ジャッジ日時 | 2025-05-22 16:30:37 |
合計ジャッジ時間 | 7,775 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:63:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 63 | scanf("%d%d",&n,&m); | ~~~~~^~~~~~~~~~~~~~ main.cpp:67:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 67 | scanf("%d%d%d",&a,&b,&c); | ~~~~~^~~~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; const ll LLINF=0x3f3f3f3f3f3f3f3fLL; const int MAX=2e5+10; struct Disjoint_Set_Union { int pre[MAX],sz[MAX]; void init(int n) { int i; for(i=1;i<=n;i++) { pre[i]=i; sz[i]=1; } } int find(int x) { if(pre[x]!=x) pre[x]=find(pre[x]); return pre[x]; } bool merge(int x,int y,bool dir=false) { x=find(x); y=find(y); if(x==y) return 0; if(!dir && sz[x]>sz[y]) swap(x,y); pre[x]=y; // x -> y sz[y]+=sz[x]; return 1; } }dsu; struct Kruskal { #define type ll #define inf LLINF struct edge{int x,y;type w;}; vector<edge> e; void init(){e.clear();} void add_edge(int a,int b,type w){e.push_back({a,b,w});} type work(int n) { int i,cnt; type res=0; dsu.init(n); sort(e.begin(),e.end(),[&](edge x,edge y){ return x.w>y.w; }); for(auto &it:e) { if(dsu.merge(it.x,it.y)) res+=it.w; } return res; } #undef type #undef inf }krsk; int main() { int n,m,i,a,b,c; scanf("%d%d",&n,&m); krsk.init(); while(m--) { scanf("%d%d%d",&a,&b,&c); krsk.add_edge(a,b,c); } printf("%lld\n",2*krsk.work(n)); return 0; }