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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JZOJ 5435. 【NOIP2017提高A组集训10.30】Graph

發布時間:2025/3/15 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5435. 【NOIP2017提高A组集训10.30】Graph 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

Input

Output

Data Constraint

Solution

  • 一開始還以為是 LCT 這樣的高級數據結構,但是仔細算了算復雜度,發現直接做也可以過。

  • 按邊權從小到大排一遍序,枚舉最小邊做一遍最小生成樹即可。

  • 如果不放心可以加一些小優化(比如超過答案就可以直接退出了),就肯定能過去了。

  • 理論時間復雜度 O(T?N?M?α(N)) ,實際跑得飛快。

Code

#include<cstdio> #include<algorithm> using namespace std; const int N=1001; struct data {int x,y,z; }a[N<<2]; int f[N],t[N]; inline int read() {int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w; } inline bool cmp(data x,data y) {return x.z<y.z; } inline int get(int x) {return f[x]==x?x:f[x]=get(f[x]); } int main() {int T=read(),tot=0;while(T--){int n=read(),m=read(),k=1,mn=-1,mx;bool pd=true;for(int i=1;i<=n;i++) f[i]=i;for(int i=1;i<=m;i++) a[i].x=read(),a[i].y=read(),a[i].z=read();sort(a+1,a+1+m,cmp);for(int i=1;i<=m;i++){if(a[i].z!=a[1].z) pd=false;int f1=get(a[i].x),f2=get(a[i].y);if(f1!=f2){f[f1]=f2,k++;if(mn<0) mn=a[i].z;mx=a[i].z;}}if(k<n){printf("-1\n");continue;}if(pd){printf("0\n");continue;}int ans=mx-mn;for(int i=1;i<=m-n+2;i++){//for(int j=k=1;j<=n;j++) f[j]=j;k=1,tot++;for(int j=i;j<=m && a[j].z-a[i].z<ans;j++){if(t[a[j].x]<tot) t[a[j].x]=tot,f[a[j].x]=a[j].x;if(t[a[j].y]<tot) t[a[j].y]=tot,f[a[j].y]=a[j].y;int f1=get(a[j].x),f2=get(a[j].y);if(f1!=f2){f[f1]=f2;if(++k==n){ans=a[j].z-a[i].z;break;}}}}printf("%d\n",ans);}return 0; }

總結

以上是生活随笔為你收集整理的JZOJ 5435. 【NOIP2017提高A组集训10.30】Graph的全部內容,希望文章能夠幫你解決所遇到的問題。

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