Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
不知道其他人说的不连通是什么意思。。In Reply To:真不知道测试数据到底是多大…… Posted by:Ruby931031 at 2012-07-09 16:31:42 //我本来假设图是不连通的,对每一个连通分量调用了一下LCA, //然后改了改,只调用一次LCA,也就是LCA(1),也过了。G++, 266ms #include <stdio.h> #include <string.h> #define MAXN 100000 #define MAXQ 40010 struct Edge{ int to,len,next,lca; }; Edge edge[MAXN],qedge[MAXQ]; bool visit[MAXN]; int n,m,head[MAXN],qhead[MAXN],dist[MAXN],p[MAXN];//dist[i]为i到根节点的距离 int find(int x){ if (x!=p[x]) p[x]=find(p[x]); return p[x]; } void LCA(int u){ int k; p[u]=u; visit[u] = true; for (k=head[u]; k!=-1; k=edge[k].next) if (!visit[ edge[k].to ]) { dist[ edge[k].to ] = edge[k].len + dist[u]; LCA( edge[k].to ); p[ edge[k].to ] = u; } for (k=qhead[u]; k!=-1; k=qedge[k].next) if (visit[ qedge[k].to ]) { qedge[k].lca = find( qedge[k].to ); qedge[k^1].lca = qedge[k].lca; } } int main() { char ch; int tot=0,i,k,len,s,e,query,qx,qy,nroot; scanf("%d %d", &n,&m); memset(head,-1,sizeof(head)); for (i=0; i<m; ++i) { scanf("%d %d %d %c", &s, &e, &len, &ch); edge[tot].to = e; //每条边正反存两遍 edge[tot].len = len; edge[tot].next = head[s]; head[s] = tot++; edge[tot].to = s; edge[tot].len = len; edge[tot].next = head[e]; head[e] = tot++; } scanf("%d", &query); memset(qhead,-1,sizeof(qhead)); for (tot=i=0; i<query; ++i) { scanf("%d %d", &qx, &qy); if (qx==qy) //两点相同时特殊处理 { qedge[tot].lca = qedge[tot^1].lca = qx; qedge[tot].to = qedge[tot^1].to = qx; tot+=2; continue; } qedge[tot].to = qy; //存两遍,只对一遍做出应答 qedge[tot].next = qhead[qx]; qhead[qx] = tot++; qedge[tot].to = qx; qedge[tot].next = qhead[qy]; qhead[qy] = tot++; } memset(visit,0,sizeof(visit)); memset(dist,0,sizeof(dist)); LCA(1); for (k=0; k<(query<<1); k+=2) printf("%d\n", dist[qedge[k].to] + dist[qedge[k^1].to] - 2 * dist[qedge[k].lca]); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator