Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re终于过了,查询中有相同的点,我没有特殊处理,后来者谨慎

Posted by dut200901102 at 2010-07-13 21:56:09 on Problem 1986
In Reply To:我的tarjan把usaco测试数据全部过了,为什么还是wa阿?过路的牛人们帮忙看看阿!!不胜感激 Posted by:dut200901102 at 2010-07-03 14:46:47
> >>rt
> 
> #include <cstdio>
> #include <cstring>
> #include <algorithm>
> #include <iostream>
> 
> using namespace std;
> 
> const int MAX=100010;
> 
> struct node{
>     int to;
>     int weigh;
>     int next;
>     int ans;
> }edges[MAX],que[MAX];
> int box1[MAX],box2[MAX];
> bool flag[MAX],visit[MAX];
> 
> int n,m,p[MAX],dis[MAX];
> 
> int find_set(int x)
> {
>     if(p[x]!=x)
>     {
>         p[x]=find_set(p[x]);
>     }
>     return p[x];
> }
> 
> void lca(int x)
> {
>     int u,e;
>              visit[x]=true;
>     p[x]=x;
>     for(int i=box1[x];i!=-1;i=edges[i].next)
>     {
>         u=edges[i].to;
>         if(!visit[u])
>         {
>             dis[u]=dis[x]+edges[i].weigh;
>             lca(u);
>             p[u]=x;
>         }
>     }
>     flag[x]=true;
>     for(int i=box2[x];i!=-1;i=que[i].next)
>     {
>         u=que[i].to;
>         if(flag[u])
>         {
>             e=find_set(u);
>             que[i].ans=dis[u]+dis[x]-2*dis[e];
>         }
>     }
> }
> int main()
> {
>     //freopen("in.txt","r",stdin);
>     int a,b,d,s,k;
>     char c[3];
>     while(scanf("%d%d",&n,&m)!=EOF)
>     {
>         memset(box1,-1,sizeof(box1));
>         memset(box2,-1,sizeof(box2));
>         memset(flag,false,sizeof(flag));
>         memset(visit,false,sizeof(visit));
>         s=0;
>         for(int i=0;i<m;++i)
>         {
>             scanf("%d%d%d%s",&a,&b,&d,c);
>             edges[s].to=b;
>             edges[s].weigh=d;
>             edges[s].next=box1[a];
>             box1[a]=s++;
>             edges[s].to=a;
>             edges[s].weigh=d;
>             edges[s].next=box1[b];
>             box1[b]=s++;
>         }
>         scanf("%d",&k);
>         s=0;
>         for(int i=0;i<k;++i)
>         {
>             scanf("%d%d",&a,&b);
>             que[s].to=b;
>             que[s].ans=0;
>             que[s].next=box2[a];
>             box2[a]=s++;
>             que[s].to=a;
>             que[s].ans=0;
>             que[s].next=box2[b];
>             box2[b]=s++;
>         }
>         dis[1]=0;
>         lca(1);
>         for(int i=0;i<s;++i)
>         {
>             if(que[i].ans)
>             printf("%d\n",que[i].ans);
>         }
>     }
>     return 0;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator