//#include #include //#include //#include //#include //#define LL long long //#define INF 1000000007 //------------------------------------------------------------ struct P{ int a; int b; int c; } e[400000],d[400000]; //------------------------------------------------------------ //void Max(int &num1,int num2) { if (num1num2) num1=num2; } //int Min(int num1,int num2) { return num1=1; now>>=1) { //--0 init dm=0; ned=n-1; for (i=1; i<=m; i++) if (e[i].c&now) d[++dm]=e[i]; for (i=1; i<=n; i++) far[i]=i; //--1 check for (i=1; i<=dm; i++) { fa=getf(d[i].a); fb=getf(d[i].b); if (fa!=fb) { far[fa]=fb; ned--; } } //--2 if (!ned) { ans+=now; for (i=1; i<=dm; i++) e[i]=d[i]; m=dm; } } //--3 if (now) ans=0; printf("%d\n",ans); } }