• 仙人掌


    仙人掌

    题目描述:
    LYK 在冲刺清华集训( THUSC)!于是它开始研究仙人掌,它想来和你一起分享它最近研究的结果。
    如果在一个无向连通图中任意一条边至多属于一个简单环(简单环的定义为每个点至多经过一次),且不存在自环,我们称这个图为仙人掌。
    LYK 觉得仙人掌还是太简单了,于是它定义了属于自己的仙人掌。
    定义一张图为美妙的仙人掌,当且仅当这张图是一个仙人掌且对于任意两个不同的点 i,j,存在一条从 i 出发到 j 的路径,且经过的点的个数为|j-i|+1 个。
    给定一张 n 个点 m 条边且没有自环的图, LYK 想知道美妙的仙人掌最多有多少条边。
    数据保证整张图至少存在一个美妙的仙人掌。
    输入格式:
    第一行两个数 n,m 表示这张图的点数和边数。
    接下来 m 行,每行两个数 u,v 表示存在一条连接 u,v 的无向边。
    输出格式:
    一个数表示答案
    输入样例:
    4 6
    1 2
    1 3
    1 4
    2 3
    2 4
    3 4
    输出样例:
    4
    样例解释:
    选择边 1-2,1-3,2-3,3-4,能组成美妙的仙人掌,且不存在其它美妙仙人掌有超过 4 条边。
    数据范围:
    对于 20%的数据 n<=3。
    对于 40%的数据 n<=5。
    对于 60%的数据 n<=8。
    对于 80%的数据 n<=1000。
    对于 100%的数据 n<=100000 且 m<=min(200000,n*(n-1)/2)。
    思路:
    定义一张图为美妙的仙人掌,当且仅当这张图是一个仙人掌
    且对于任意两个不同的点 i,j,存在一条从 i 出发到 j 的
    路径,且经过的点的个数为|j-i|+1 个。
    对于i和i+1要经过2个点即只能是这两个点之间直接有一条边
    这n-1条连接i和i+1的边一定选 选完这些边之后正好满足了
    任意两点之间的要求
    现在即在保证是仙人掌的前提下多选边
    接下来选的边要保证没有交集 因为现在已经选了i到i+1的边
    其他的边会和现在已经选的边形成环 若选两个有交集的边
    则不满足仙人掌的性质
    所以问题就转化成了线段覆盖……

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=200010;
    int n,m,tot,ans;
    struct node
    {
        int x;
        int y;
        bool operator < (node tmp)const
        {
            return y<tmp.y;
        }
    }a[maxn*2];
    int main()
    {
        freopen("cactus.in","r",stdin);
        freopen("cactus.out","w",stdout);
        int x,y;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%d%d",&x,&y);
            if(x>=y) swap(x,y);
            if(x+1==y) continue;
            a[++tot].x=x;a[tot].y=y;
        }
        sort(a+1,a+tot+1);
        int end=-1;
        for(int i=1;i<=tot;i++)
        if(a[i].x>=end)
        {
            end=a[i].y;
            ans++;
        }
        cout<<ans+n-1;
        fclose(stdin);fclose(stdin);
        return 0;
    }
  • 相关阅读:
    .net framework 3.5 和 4.0 的结构图以及Namespaces参考,强烈推荐下载了解!
    ASP.NET操作简单的xml,增删改查
    Http协议详解版本一
    asp.net ToString()格式汇总
    UC首页图片切换
    vs2005部署错误解决方法:ASPNETMERGE : error 1013: Cannot find any assemblies that can be merged in the application bin folder.
    ADO.net,Linq to SQL和Entity Framework性能实测分析
    vs2010下载地址
    如何使用iReaper来下载微软视频教程
    面试经典70题
  • 原文地址:https://www.cnblogs.com/cax1165/p/6070897.html
Copyright © 2020-2023  润新知