1 solutions
-
0
C++ :
#include <cstdio> #include <cmath> #include <cstring> #include <climits> #include <algorithm> using namespace std; typedef long long LL; int N=0,M=0,r1=0,r2=0,Q=0,Deep=0; int F[100010]={0},D[100010]={0}; inline int find(int x){ if(F[x]!=x) F[x]=find(F[x]); return F[x]; } inline bool Union(int x,int y){ r1=find(x); r2=find(y); if(r1==r2) return false; else{ F[r2]=r1; return true; } } class node{ public: int s,t,v; bool operator < (const node& b) const { return v<b.v; } }E[400010]; class data{ public: int to,next,v; }T[400010]; int line[400010]={0},tot=0; inline void Insert(int x,int y,int v){ tot++; T[tot].to=y; T[tot].v=v; T[tot].next=line[x]; line[x]=tot; } int W[300010][25]={0}; int Fa[300010][25]={0}; void Build(int x,int deep){ D[x]=deep; for(int i=line[x];i!=0;i=T[i].next){ int p=T[i].to; if(!Fa[p][0]){ Fa[p][0]=x; W[p][0]=T[i].v; Build(p,deep+1); } } } int LCA(int x,int y){ int Res=INT_MIN; if(D[x]<D[y]) swap(x,y); for(int j=Deep-1;j>=0;--j){ if(D[Fa[x][j]]>=D[y]){ Res=max(Res,W[x][j]); x=Fa[x][j]; } } if(x!=y){ for(int j=Deep-1;j>=0;--j){ if(Fa[x][j]!=Fa[y][j]){ Res=max(Res,max(W[x][j],W[y][j])); x=Fa[x][j]; y=Fa[y][j]; } } Res=max(Res,max(W[x][0],W[y][0])); } return Res; } int main(){ //freopen("truck.in","r",stdin); //freopen("truck.out","w",stdout); scanf("%d%d",&N,&M); Deep=(int)(log((double)N)/log(2.0))+1; int x=0,y=0,v=0; for(int i=1;i<=M;++i){ scanf("%d%d%d",&x,&y,&v); E[i].s=x; E[i].t=y; E[i].v=v; } sort(E+1,E+M+1); for(int i=1;i<=N;++i) F[i]=i; for(int i=1;i<=M;++i){ if(Union(E[i].s,E[i].t)){ Insert(E[i].s,E[i].t,E[i].v); Insert(E[i].t,E[i].s,E[i].v); } } for(int i=1;i<=N;++i){ if(!Fa[i][0]){ W[i][0]=INT_MIN; Fa[i][0]=i; Build(i,1); } } for(int j=1;j<Deep;++j){ for(int i=1;i<=N;++i){ Fa[i][j]=Fa[Fa[i][j-1]][j-1]; W [i][j]=max(W[i][j-1],W[Fa[i][j-1]][j-1]); } } scanf("%d",&Q); x=0,y=0; for(int i=1;i<=Q;++i){ scanf("%d%d",&x,&y); if(find(x)!=find(y)) puts("impossible"); else printf("%d\n",LCA(x,y)); } return 0; }
- 1
Information
- ID
- 17892
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By