【BZOJ3732】Network 最小生成树+LCA
2014-10-04 16:40
525 查看
这根本明明和NOIP2013第三题火车运输几乎一模一样的好吗?
要求难度在省选之上难道也是在逗我?或者NOIP的难度已经在省选之上了?0.0
回想起当初的我,刚刚学会结构体快排qsort就上考场(那时的我们还是C党)……那时的我还不知道什么是邻接矩阵(更别提链式前向星)……那时的我写了一个开心的不读入优化……那时的我此题爆零……
求一下最小生成树,再LCA(什么?倍增?为什么我没有用也AC了?0.0)……
至于结构体什么名字,我想还是叫 MaiMeng 比较合适(现在写的话我会写成 pair<pair<int,int>,int>...)~~
附C++代码(为什么不用sort?因为我当初不会重载bool运算符):
要求难度在省选之上难道也是在逗我?或者NOIP的难度已经在省选之上了?0.0
回想起当初的我,刚刚学会结构体快排qsort就上考场(那时的我们还是C党)……那时的我还不知道什么是邻接矩阵(更别提链式前向星)……那时的我写了一个开心的不读入优化……那时的我此题爆零……
求一下最小生成树,再LCA(什么?倍增?为什么我没有用也AC了?0.0)……
至于结构体什么名字,我想还是叫 MaiMeng 比较合适(现在写的话我会写成 pair<pair<int,int>,int>...)~~
附C++代码(为什么不用sort?因为我当初不会重载bool运算符):
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define N 15010 #define M 30010 int cnt,to[M],v[M],next[M],head ; int n,m,q,f ,fa ,deep ,dist ,tot; void add(int x,int y,int z) { v[++cnt]=z; to[cnt]=y; next[cnt]=head[x]; head[x]=cnt; } struct MaiMeng { int u,v,w; }edge[M]; int cmp(const void *a,const void *b) { struct MaiMeng *x=(struct MaiMeng *)a; struct MaiMeng *y=(struct MaiMeng *)b; return x->w-y->w; } int find(int x) { if(f[x]==x) return x; return f[x]=find(f[x]); } int lca(int x,int y) { int re=0; if(deep[x]<deep[y]) swap(x,y); while(deep[x]>deep[y]) re=max(re,dist[x]),x=fa[x]; while(x!=y) re=max(re,max(dist[x],dist[y])),x=fa[x],y=fa[y]; return re; } void dfs(int x,int pre,int step,int d) { fa[x]=pre;deep[x]=step;dist[x]=d; for(int i=head[x];i;i=next[i]) if(to[i]!=fa[x]) dfs(to[i],x,step+1,v[i]); } int main() { cin>>n>>m>>q; for(int i=1;i<=n;i++) f[i]=i; for(int x,y,z,i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); edge[i].u=x; edge[i].v=y; edge[i].w=z; } qsort(edge+1,m,sizeof(edge[1]),cmp); for(int i=1;i<=m;i++) { int fx=find(edge[i].u),fy=find(edge[i].v); if(fx!=fy) { tot++; f[fx]=fy; add(edge[i].u,edge[i].v,edge[i].w); add(edge[i].v,edge[i].u,edge[i].w); } } for(int i=1;i<=n;i++) if(f[i]==i) dfs(i,0,1,0); for(int x,y,i=1;i<=q;i++) { scanf("%d%d",&x,&y); printf("%d\n",lca(x,y)); } return 0; }
相关文章推荐
- [BZOJ]3732: Network 最小生成树 LCA
- bzoj3732 Network 最小生成树+LCA+树上倍增
- 【BZOJ】3732 Network 最小生成树+LCA
- bzoj 3732: Network (最小生成树+LCA)
- [bzoj3732][最小生成树][lca]Network
- 【bzoj3732】 network 最小生成树+lca
- 【bzoj3732】Network 最小生成树+倍增LCA
- BZOJ 3732 Network —— 最小生成树 + 倍增LCA
- BZOJ 3732: Network(最小生成树+倍增)
- 【kruscal】【最小生成树】【块状树】bzoj3732 Network
- BZOJ 3732: Network 最小生成树 倍增
- BZOJ3732 解析报告//LCA,最小生成树
- 【BZOJ】【P3732】【Network】【题解】【最小生成树+倍增】
- HYSBZ - 3732 最小生成树+倍增Lca
- BZOJ 3732: Network|Kruskal|Lca
- 【BZOJ2238】Mst 最小生成树+LCA+堆
- bzoj3732: Network(倍增LCA+最小生成树)
- 倍增LCA(bzoj 3732: Network)
- 【bzoj3732】Network kruskal+lca
- 【LCA+MST】BZOJ3732-Network