hdu 2874 Connections between cities(LCA)
来源:互联网 发布:淘宝达人号出售 编辑:程序博客网 时间:2024/04/29 23:04
hdu 2874 Connections between cities
普通的LCA求最短距离,只不过此题存在不连通情况,并查集判断下
#include<cstdio>#include<cstring>#include<vector>using namespace std;#define MAXN 10005struct tnode{ int v,d; tnode(int v=0,int d=0):v(v),d(d){}};struct qnode{ int v,id; qnode(int v=0,int id=0):v(v),id(id){}};vector<tnode> t[MAXN];vector<qnode> q[MAXN];int dis[MAXN],fa[MAXN],con[MAXN],ans[1000005];int n,m;bool vis[MAXN];void ini(){ for(int i=0;i<=n;i++) { t[i].clear(); q[i].clear(); fa[i]=con[i]=i; vis[i]=false; }}int find(int x,int *f) {return x==f[x]?x:f[x]=find(f[x],f);}void setunion(int x,int y){ int fx=find(x,con),fy=find(y,con); if(fx!=fy) con[fx]=fy;}void lca(int u){ vis[u]=true; for(int i=0;i<q[u].size();i++) { int v=q[u][i].v; if(vis[v]) { if(find(u,con)!=find(v,con)) ans[q[u][i].id]=-1; else ans[q[u][i].id]=dis[u]+dis[v]-2*dis[find(v,fa)]; } } for(int i=0;i<t[u].size();i++) { int v=t[u][i].v; if(!vis[v]) { dis[v]=dis[u]+t[u][i].d; lca(v); fa[v]=u; } }}int main(){ int x; while(scanf("%d%d%d",&n,&x,&m)!=EOF) { ini(); int u,v,d; while(x--) { scanf("%d%d%d",&u,&v,&d); setunion(u, v); t[u].push_back(tnode(v,d)); t[v].push_back(tnode(u,d)); } for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); q[u].push_back(qnode(v,i)); q[v].push_back(qnode(u,i)); } for(int i=1;i<=n;i++) if(con[i]==i) { dis[i]=0; lca(i); } for(int i=0;i<m;i++) if(ans[i]==-1) printf("Not connected\n"); else printf("%d\n",ans[i]); } return 0;}
0 0
- hdu 2874 Connections between cities LCA
- HDU 2874 Connections between cities [LCA]
- hdu 2874 Connections between cities (LCA)
- hdu 2874 Connections between cities(LCA)
- 【HDU】2874 Connections between cities 离线LCA
- hdu 2874 Connections between cities(LCA)
- hdu 2874 Connections between cities(LCA)
- HDU 2874 Connections between cities (离线LCA)
- HDU 2874 Connections between cities(LCA)
- HDU 2874 Connections between cities(LCA离线)
- HDU - 2874 Connections between cities(LCA)
- Connections between cities (hdu 2874 LCA)
- HDU 2874 Connections between cities(LCA + RMQ)
- HDU 2874 Connections between cities 【LCA】
- hdu 2874 Connections between cities(LCA)
- HDU 2874Connections between cities(LCA)
- HDU 2874Connections between cities LCA
- HDU 2874 Connections between cities 离线LCA
- HDU 1269 迷宫城堡(强连通)
- hdu5067状压
- 全文检索系统与Lucene简介
- 练习题目6. 输入学生的高考成绩,成绩>=560,输出读一本,如果>=520,输出读二本,如果>=480输出读三本,否则输出读专科。
- LINQ之路11:LINQ Operators之过滤(Filtering)
- hdu 2874 Connections between cities(LCA)
- C++引用
- 九度OJ 1198
- 动态规划和贪心算法的区别
- Java 内存分配全面浅析(转)(值得一看)
- hdu 2222 AC自动机
- 练习题目7. 从键盘输入一个数,判断是否是素数。
- 主流Unix/Linux(RedHat) 命令区别
- SGU 197 Nice Patterns Strike Back || ZOJ 2317 Nice Patterns Strike Back