码迷,mamicode.com
首页 > 其他好文 > 详细

HDU2874

时间:2017-10-07 16:26:30      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:sizeof   color   stream   技术分享   update   namespace   mes   connected   nbsp   

不知道为什么_add2不能只用单方向呢。。。。。。。。。。。调试了好多次,待我解决这个狗血问题

技术分享

#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#include <cstdio>
#include <memory.h>
#include<vector>
using namespace std;
int Laxt[10001],Next[20001],To[20001],Len[20001];
int Laxt2[10001],Next2[2000001],To2[2000001],ans[1000001];
bool vis[10001];
int cnt,cnt2;
int dis[10001],fa[10001];
void _update()
{
    memset(Laxt,-1,sizeof(Laxt));
    memset(Laxt2,-1,sizeof(Laxt2));
    memset(vis,false,sizeof(vis));
    cnt=cnt2=0;
}
void _add(int u,int v,int d){
    Next[cnt]=Laxt[u];
    Laxt[u]=cnt;
    To[cnt]=v;
    Len[cnt++]=d;
}
void _add2(int u,int v){
    Next2[cnt2]=Laxt2[u];
    Laxt2[u]=cnt2;
    To2[cnt2++]=v;
    Next2[cnt2]=Laxt2[v];
    Laxt2[v]=cnt2;
    To2[cnt2++]=u;
}
int _findfa(int v){
    if(v==fa[v]) return fa[v];
    return fa[v]=_findfa(fa[v]);
}
void _tarjan(int v)
{
    vis[v]=true;fa[v]=v;
    for(int i=Laxt[v];i!=-1;i=Next[i]){
        if(!vis[To[i]]){
            dis[To[i]]=dis[v]+Len[i];
            _tarjan(To[i]);
            fa[To[i]]=v;
        }
    }
    for(int i=Laxt2[v];i!=-1;i=Next2[i]){
        if(vis[To2[i]]){
            int tmp=_findfa(To2[i]);
            if(dis[To2[i]]!=-1)
              ans[i/2]=dis[v]+dis[To2[i]]-2*dis[tmp];
        }
    }
}
int main()
{ 
    int n,m,c,i,x,y,z;
      while(~scanf("%d %d %d",&n,&m,&c)){
           _update();
           for(i=0;i<m;i++){
                scanf("%d%d%d",&x,&y,&z);
                _add(x,y,z);
                _add(y,x,z);
           }
           for(i=0;i<c;i++){
                scanf("%d%d",&x,&y);
                _add2(x,y);
           }
            for(i=1;i<=n;i++){
                if(!vis[i]){
                  memset(dis,-1,sizeof(dis));
                  dis[i]=0;
                  _tarjan(i);
                }
             } 
               for(i=0;i<c;i++)
               if(ans[i]==-1) printf("Not connected\n");
               else  printf("%d\n",ans[i]);
      }
      return 0;
}

 

HDU2874

标签:sizeof   color   stream   技术分享   update   namespace   mes   connected   nbsp   

原文地址:http://www.cnblogs.com/hua-dong/p/7634718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!