zoukankan      html  css  js  c++  java
  • 银联高校极客挑战赛 初赛 第一场 B

    自学图论的码队弟弟

    试图写非递归求解,然后TLE了一下午==,全程找不到bug,换成递归,一发AC

    判断环写得很丑==

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define P pair<int,int>
    
    vector<P> G[100005];
    bool vis[100005];
    int n;
    int fa[100005];
    int x[100004];
    bool s[100005];
    bool fx[100005];
    int in=-1;
    int T=0;
    int a;
    bool dfs(int x)
    {
        T++;
       // if(vis[x])return false;
        //if(++T>100000)puts(0);
        for(int i=0; i<G[x].size(); i++)
        {
            a=G[x][i].first;
            //if(G[a].size()==1)continue;
            if((a!=fa[x])&&(!vis[a]))
            {
                fa[a]=x;
                vis[a]=1;
                if(dfs(a))
                {
                    return true;
                }
            }
            else if((a!=fa[x])&&vis[a])
            {
                fa[a]=x;
                in=a;
                return true;
            }
        }
        return false;
    }
    void solve(int k)
    {
        fx[k]=1;
        int n=G[k].size();
        for(int i=0;i<n;i++){
            int a=G[k][i].first;
            int b=G[k][i].second;
            x[a]=b-x[k];
            
            if(!fx[a])
            solve(a);
        }
    }
    int main()
    {
        scanf("%d",&n);
        int a,b,c;
        int R=1;
        for(int i=0; i<n; i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            G[a].push_back(P(b,c));
            G[b].push_back(P(a,c));
            if(G[a].size()>G[R].size())R=a;
            if(G[b].size()>G[R].size())R=b;
        }
        vis[R]=1;
        dfs(R);
    
        int t=in;
        int g=1,dd=0;
        int ans=0;
        
        while((!dd)||t!=in)
        {
            dd=1;
           
            for(int i=0; i<G[t].size(); i++)
            {
                if(G[t][i].first==fa[t])
                {
                    ans+=g*G[t][i].second;
                    g*=-1;
                    t=fa[t];
                    break;
                }
    
            }
        }
        x[in]=ans/2;
        fx[in]=1;
        solve(in);
        
        /*while(true)
        {
            
            /*if(T+10>=100000){
                puts(0);
            }
            bool wa=0;
            /*for(int i=1; i<=n; i++)
            {
                if(!fx[i])
                {
                    wa=1;
                    break;
                }
            }
            if(!wa)break;
            if(t==-1)
            {
                for(int i=1; i<=n; i++)
                {
                    if(fx[i]&&!(s[i]))
                    {
                        t=i;
                        break;
                    }
                }
                if(t==-1)break;
            }
            k=t;
            t=-1;
            for(int i=0; i<G[k].size(); i++)
            {
                int l=G[k][i].first;
                int r=G[k][i].second;
                x[l]=r-x[k];
                fx[l]=1;
                if(!s[l]&&t==-1)t=l;
            }
            s[k]=1;
    
    
        }
        */
        for(int i=1; i<=n; i++)
        {
            cout<<x[i]<<'
    ';
        }
    
    }
  • 相关阅读:
    黑苹果安装 this is an unknown cpu model 0x3a
    JQMobile引入外部CSS,JS文件
    iphone系统更新 3002错误
    移动端HTML5框架
    花生壳动态域名解析使用
    win7 配置IIS + php 环境
    php在字符串中替换多个字符
    PHP 获取文件名和扩展名的方法
    Mysql无法创建外键的原因
    wordpress无法登录的解决方法
  • 原文地址:https://www.cnblogs.com/liulex/p/11228255.html
Copyright © 2011-2022 走看看