• 基环树略解

    基环树

    基环树,也叫 环套树,是一种图的类型。如果连通图 \(G=\{V,E\}\)\(|V|=|E|\),则我们称它是基环树。

    顾名思义,基环树就好似是在一棵树上加一条边得到的图。基环树有且仅有一个环,所以也被成为环套树。
    在这里插入图片描述
    如上图所示的图就是一棵基环树。

    用途

    基环树没什么用。

    它只能解决部分特殊问题,而这类问题通常会注明“边数=点数”,解法也比较单一,常被与其他算法一同考察。

    我们来看几道例题。


    luogu P1453 城市环路)今有基环树 \(G=\{V,E\}\),定义\[ans=\sum_{i=1}^{N}{a_i·b_i}\]\(\forall i\in[1,N]∩\N^*\)\(b_i\in\{0,1\}\),且 \(\forall e=(u,v)\in E\)\(b_u\text{ and }b_v=0\)\(\text{and}\) 表示按位与运算)。求 \(ans_{\max}\)

    Solution 本题中如果 \(N=M+1\),这显然就是“没有上司的舞会”了。

    考虑将新问题转化成已解决的问题。我们发现,环上有且仅有一条边对计算不产生影响,删除它即可。由一条边上的两个点不能被同时选中,不难想到给每个点设置两个状态:选中(1)与不选中(0);并查集找环,删除一条边后做树形动态规划即可解决此题。时间复杂度 \(O(N\alpha(N))\)

    参考代码

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    
    const int MAXN=100010;
    
    int fa[MAXN];
    int a[MAXN];
    int sx,sy,fx,fy;
    int ST,ED;
    int n;
    
    struct node{
        int x,y,next;
    }e[MAXN+MAXN];
    int len=0;
    int first[MAXN];
    int ans;
    int f[MAXN][3];
    
    
    int findfa(int x){
        if(x==fa[x]) return x;
        return fa[x]=findfa(fa[x]);
    }
    void ins(int x,int y){
        e[++len].x=x;e[len].y=y;
        e[len].next=first[x];first[x]=len;
    }
    int max(int x,int y){
        return x>y?x:y;
    }
    void dfs(int x,int last){
        f[x][1]=a[x];f[x][0]=0;
        for(int i=first[x];i;i=e[i].next){
            int y=e[i].y;
            if(y==last) continue;
            dfs(y,x);
            f[x][0]+=max(f[y][1],f[y][0]);
            f[x][1]+=f[y][0];
        }
    }
    inline int read(){
        int x=0; char c;
        do c=getchar(); while(c<'0'||c>'9');
        while(c>='0'&&c<='9')
            x=x*10+c-48,c=getchar();
        return x;
    }
    int main(){
        n=read();
        for(int i=1;i<=n;++i){
            a[i]=read();
            fa[i]=i;
        }
        memset(first,0,sizeof(first));
        for(int i=1;i<=n;++i){
            sx=read()+1;sy=read()+1;
            fx=findfa(sx);fy=findfa(sy);
            if(fx==fy){
                ST=sx;ED=sy;
                continue;
            }
            ins(sx,sy);ins(sy,sx);
            fa[fx]=fy;
        }
        memset(f,0,sizeof(f));
        dfs(ST,0);ans=f[ST][0];
        dfs(ED,0);ans=max(ans,f[ED][0]);
        double k;
        scanf("%lf",&k);
        printf("%.1lf",ans*k);
    }

    接下来的这道习题与例题的思路不太一样。

    练习 1[NOIp2018] luogu P5022 旅行)有一棵基环树 \(T\),你初始在一个点上。每次可以从下列选项中选择一项执行:

    1. 沿着一条边走到一个没有访问过的点;
    2. 沿着一条边返回一个访问过的点。

    你需要依此法访问所有的 \(N\) 个点。每个点被首次访问的顺序形成了一个序列,求这个序列字典序最小的那个。

    基环树的建图同样重要。
    练习 2luogu P2607 [ZJOI2008]骑士)有 \(N\) 个人,每个人有两个值:\(d_i\) 战斗力,\(t_i\) 讨厌的人的编号(\(t_i\neq i\))。从这 \(N\) 个人中选出若干个人,使他们讨厌的人没被选中,且他们的战斗力之和最大。

    总结

    基环树的初步内容较少,解法单一,经常与其他算法一同出现。

    解决基环树上问题的关键点就是:处理额外边,将原问题转化成树上问题。

    本文列举了两种处理额外边的方法,难免有所疏漏敬请指正。此外,如果读者有好题推荐可以在评论区留言,我会尽量回复。感谢阅读。

    相关文章
    相关标签/搜索
    王中王蓝月亮930三肖三码 望城县| 岳普湖县| 广汉市| 和田县| 通城县| 安图县| 祁阳县| 两当县| 合作市| 泸西县| 辽源市| 富锦市| 隆尧县| 英吉沙县| 阜阳市| 闵行区| 靖安县| 剑川县| 柘城县| 盐津县| 大石桥市| 鹿泉市| 临夏市| 荥经县| 德钦县| 安西县| 塔河县| 鄯善县| 黑河市| 江孜县| 大化| 莲花县| 惠东县| 隆回县| 靖宇县| 黔南| 阿瓦提县| 渝北区| 洪洞县| 琼中| 清流县| 睢宁县| 东乡族自治县| 温泉县| 荥阳市| 喜德县| 靖州| 巍山| 阜阳市| 丹东市| 秦皇岛市| 三亚市| 团风县| 九龙城区| 土默特左旗| 大竹县| 申扎县| 徐州市| 萍乡市| 滨州市| 龙州县| 金华市| 黄浦区| 布尔津县| 富平县| 铜鼓县| 秀山| 田阳县| 武邑县| 浦东新区| 乐亭县| 英山县| 简阳市| 会宁县| 谢通门县| 车险| 巍山| 陇川县| 黎川县| 宁陕县| 云龙县| 扬州市| 阳山县| 马鞍山市| 大兴区| 多伦县| 滨海县| 静安区| 武邑县| 三穗县| 分宜县| 博客| 重庆市| 乐清市| 永寿县| 塘沽区| 新疆| 于都县| 桂平市| 大悟县| 灵山县| 偏关县| 共和县| 万年县| 白水县| 连城县| 科尔| 万山特区| 金寨县| 四会市| 大荔县| 抚宁县| 兴安县| 晋江市| 嘉定区| 乡宁县| 沙湾县| 莱西市| 迁西县| 瑞安市| 巴塘县| 体育| 临颍县| 乌拉特前旗| 满城县| 化隆| 海兴县| 红桥区| 天祝| 清水河县| 新野县| 承德县| 屯昌县| 平谷区| 深州市| 济阳县| 织金县| 木兰县| 承德县| 从江县| 平远县| 贺州市| 临海市| 岳普湖县| 深水埗区| 贞丰县| 阿瓦提县| 富平县| 怀柔区| 海林市| 丹阳市| 姜堰市| 蓬溪县| 奉贤区| 平陆县| 石泉县| 萨嘎县| 商水县| 灵丘县| 依安县| 湾仔区| 大庆市| 新田县| 桐梓县| 呈贡县| 上思县| 福鼎市| 珲春市| 永新县| 镇原县| 云林县| 彭泽县| 乐昌市| 娱乐| 嘉黎县| 同心县| 临澧县| 建水县| 泸西县| 南木林县| 恩施市| 垦利县| 定州市| 沙湾县| 公安县| 饶阳县| 揭东县| 前郭尔| 界首市| 蕲春县| 芮城县| 渑池县| 甘泉县| 哈巴河县| 团风县| 屯昌县| 淳安县| 昆明市| 山东省| 厦门市| 班戈县| 上饶县| 尉犁县| 赤城县| 玉环县| 吉首市| 腾冲县| 台南市| 阳原县| 朝阳区| 台中市| 江达县| 新野县| 木兰县| 囊谦县| 驻马店市| 札达县| 岳西县| 望都县| 平和县| 岳阳市| 田阳县| 亚东县| 称多县| 云南省| 汉川市| 沂南县| 吴桥县| 洞头县| 从江县| 泌阳县| 昆山市| 商河县| 濮阳县| 新丰县| 苍梧县| 玛纳斯县| 南溪县| 宜丰县| 吴桥县| 陵水| 西贡区| 沁阳市| 青龙| 温泉县| 伊吾县| 长子县| 洛阳市| 大丰市| 徐水县| 安宁市| 福海县| 乐平市| 周宁县| 万山特区| 河津市| 通辽市| 泽州县| 庄河市| 浮梁县| 湟源县| 宁蒗| 张家界市| 桓台县| 同江市| 都安| 呼和浩特市| 玉山县| 屏东县| 巴东县| 青田县| 浦北县| 汉阴县| 双江| 龙泉市| 锦州市| 镶黄旗| 应用必备| 晴隆县| 桐柏县| 凤阳县| 定襄县| 黔西县| 景德镇市| 香格里拉县| 毕节市| 太原市| 安阳县| 辰溪县| 茂名市| 资中县| 浠水县| 蕲春县| 邹城市| 壤塘县| 东山县| 津南区| 钦州市| 克什克腾旗| 台湾省| 益阳市| 阜城县| 平湖市| 会理县| 陇川县| 靖远县| 库车县| 枣强县| 永清县| 朝阳县| 贵德县| 绥德县| 措勤县| 平度市| 普洱| 长宁区| 望都县| 来凤县| 密山市| 桓台县| 揭东县| 慈溪市| 沙洋县| 化州市| 浦江县| 阜宁县| 平顺县| 辛集市| 盐源县| 沂源县| 三河市| 吉首市| 抚宁县| 麻江县| 闻喜县| 丰都县| 邢台市| 新巴尔虎左旗| 伊川县| 普安县| 定结县| 永顺县| 灵宝市| 高邮市| 东乡族自治县| 安阳市| 龙井市| 南投县| 新密市| 西盟| 托克逊县| 绥化市| 贺州市| 蒙自县| 凯里市| 荥经县| 张掖市| 西吉县| 莫力| 赣榆县| 平乡县| 新竹市| 五大连池市| 嘉兴市| 黄大仙区| 阳高县| 项城市| 曲靖市| 紫云| 黄陵县| 阜新| 泸定县| 伽师县| 乌兰浩特市| 禹城市| 五常市| 道真| 廊坊市| 清水县| 荥阳市| 板桥市| 密山市| 渝北区| 卢龙县| 临泉县| 象州县| 侯马市| 怀来县| 保亭| 岑溪市| 淮北市| 长子县| 两当县| 柳江县| 阿尔山市| 郁南县| 西乌珠穆沁旗| 宾阳县| 陇南市| 鹤岗市| 荆州市| 贵南县| 高阳县| 高平市| 凉城县| 阿巴嘎旗| 黔南| 佛山市| 文登市| 尤溪县| 呼和浩特市| 玉田县| 庆城县| 安塞县| 缙云县| 临武县| 昌吉市| 清徐县| 肥西县| 德阳市| 静海县| 泽州县| 沁源县| 天峻县| 广南县| 丹凤县| 沾益县| 涡阳县| 南通市| 石渠县| 宁安市| 安岳县| 临洮县| 望都县| 睢宁县| 普宁市| 芦山县| 瑞丽市| 精河县| 道真| 仁怀市| 余江县| 象山县| 邮箱| 都昌县| 滦南县| 布尔津县| 启东市| 黄梅县| 酒泉市| 昌图县| 登封市| 瓮安县| 金沙县| 成安县| 铁岭县| 安新县| 吕梁市| 轮台县| 石阡县| 临安市| 五寨县| 融水| 临邑县| 花莲市| 扶沟县| 蒲城县| 五常市| 驻马店市| 湘西| 包头市| 随州市| 永州市| 岳阳县| 汝南县| 洞口县| 雷州市| 东源县| 舒城县| 宣化县| 定安县| 抚远县| 禄劝| 通州区| 新沂市| 清新县| 格尔木市| 平安县| 千阳县| 纳雍县| 佛学| 聂拉木县| 林周县| 临湘市| 临澧县| 满城县| 北流市| 闸北区| 尉犁县| 鄢陵县| 民乐县| 绥棱县| 双桥区| 通渭县| 辽阳县| 康平县| 镇江市| 靖安县| 奉化市| 金乡县| 项城市| 盖州市| 花莲县| 平罗县| 繁昌县| 南丰县| 贞丰县| 鄂伦春自治旗| 商城县| 锡林郭勒盟| 图木舒克市| 襄樊市| 潼南县| 万盛区| 十堰市| 临颍县| 东明县| 广灵县| 察隅县| 霍邱县| 花莲县| 建阳市| 兰州市| 玛曲县| 准格尔旗| 兴山县| 西华县| 蕉岭县| 崇礼县| 方城县| 安乡县| 获嘉县| 会昌县| 泰兴市| 阿鲁科尔沁旗| 嵊州市| 陆良县| 淮安市| 图片| 麻阳| 积石山| 黄冈市| 玛曲县| 桦南县| 鱼台县| 宣威市| 高碑店市| 铜陵市| 大余县| 高淳县| 栾城县| 乐清市| 柳林县| 玛沁县| 蒙城县| 河西区| 连平县| 巴青县| 虹口区| 吉首市| 沙洋县| 腾冲县| 前郭尔| 乌鲁木齐市| 张家港市| 双城市| 会昌县| 喀喇沁旗| 玛多县| 通江县| 耒阳市| 房山区| 恩平市| 阳曲县| 襄樊市| 阿图什市| 义马市| 思南县| 隆林| 平安县| 民勤县| 宕昌县| 金秀| 成都市| 江永县| 咸丰县| 沭阳县| 鄂伦春自治旗| 通化市| 巴青县| 孙吴县| 仪陇县| 双江| 白山市| 大埔县| 墨竹工卡县| 铜鼓县| 新宁县| 武冈市| 临颍县| 米易县| 长葛市| 安化县| 南召县| 淮滨县| http://jx1870bluev.fun http://wap.jx1870bobv.fun http://wap.jx1870clipv.fun http://m.jx1870antiquev.fun http://wap.jx1870boatv.fun http://m.jx1870culturev.fun http://3g.jx1870assistv.fun http://m.jx1870addv.fun http://3g.jx1870djv.fun http://www.jx1870docuzentv.fun http://wap.jx1870certificatev.fun http://3g.jx1870capv.fun http://m.jx1870blankv.fun http://3g.jx1870breakfastv.fun http://m.jx1870coachv.fun http://3g.jx1870coursev.fun http://wap.jx1870accessv.fun http://3g.jx1870accessv.fun