zoukankan      html  css  js  c++  java
  • HDU

    题目大意:给你个无向图,每条边非黑即白,判断其生成树能否包含斐波那契数条白边

    具体思路:把边赋一个权值(白边为1,黑边为0),做一遍最小生成树,做一遍最大生成树

    然后我们就可以知道至少要几条白边,至多要几条白边

    然后判一下这个区间内有没有斐波那契数就好了

    AC代码

    #include<bits/stdc++.h>
    using namespace std;
    int T,i,j,n,fa[200000],x[200000],y[200000],m,fib[200000];
    pair<int,int> a[200000];
    int ask(int x){if(fa[x]==x)return x;else return fa[x]=ask(fa[x]);}
    int main()
    {
        scanf("%d",&T);
        fib[1]=1,fib[2]=2;
        for (i=3;i<=1000;i++)fib[i]=fib[i-1]+fib[i-2];
        int t;
        for (t=1;t<=T;t++)
        {
            printf("Case #%d: ",t);
            scanf("%d%d",&n,&m);
            for (i=1;i<=n;i++)fa[i]=i;
            for (i=1;i<=m;i++)
                scanf("%d%d%d",&x[i],&y[i],&a[i].first),a[i].second=i;
            sort(a+1,a+1+m);
            int tot=0,totw1=0;
            for (i=1;i<=m;i++)
            {
                int fx=ask(x[a[i].second]),fy=ask(y[a[i].second]);
                if(fx!=fy)
                {
                    tot++;
                    if(a[i].first)totw1++;
                    fa[fx]=fy;
                }
            }
            if(tot!=n-1)
            {
                puts("No");
                continue;
            }
            for (i=1;i<=n;i++)fa[i]=i;
            int totw2=0;
            for (i=m;i>=1;i--)
            {
                int fx=ask(x[a[i].second]),fy=ask(y[a[i].second]);
                if(fx!=fy)
                {
                    if(a[i].first)totw2++;
                    fa[fx]=fy;
                }
            }
            bool answer=false;
            for (i=1;i<=1000;i++)if(totw1<=fib[i]&&fib[i]<=totw2)
            {
                answer=true;
                break;
            }
            if(answer)puts("Yes");else puts("No");
        }
        return 0;
    }
  • 相关阅读:
    Hive的安装和建表
    在MarkDown中插入数学公式对照表(持续更新)
    Beta版本冲刺总汇
    a版本十日冲刺总汇
    “我们只是信息的搬运工”
    调查报告
    Beta版本冲刺第七天
    Beta版本冲刺第六天
    Beta版本冲刺第五天
    Beta版本冲刺第四天
  • 原文地址:https://www.cnblogs.com/Orange-User/p/7751597.html
Copyright © 2011-2022 走看看