JZOJ 5435. 【NOIP2017提高A组集训10.30】Graph
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 5435. 【NOIP2017提高A组集训10.30】Graph
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Description
Input
Output
Data Constraint
Solution
一開始還以為是 LCT 這樣的高級數(shù)據(jù)結構,但是仔細算了算復雜度,發(fā)現(xiàn)直接做也可以過。
按邊權從小到大排一遍序,枚舉最小邊做一遍最小生成樹即可。
如果不放心可以加一些小優(yōu)化(比如超過答案就可以直接退出了),就肯定能過去了。
理論時間復雜度 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的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 5431. 【NOIP2017
- 下一篇: JZOJ 5434. 【NOIP2017