• [题解]luogu_P2607_骑士(基环树+dp

    我调炸了(Fword

    面向数据编程*1

    另外一道双倍经验题相同代码可过

    简单的树形dp,和dp

    $f[i][0/1][0/1]$为到$i$选/不选当前,选/不选1号的答案

    也可以两次树形dp,一次强制断环上一条边,一次强制连接

    #pragma GCC optimize(2)
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define ll long long
    using namespace std;
    const int maxn=1000009;
    int n,w[maxn],tot;
    int v[maxn],v2[maxn],id[maxn];
    struct node{
        int v,nxt;
    }e[maxn<<1];
    int head[maxn],cnt=1;
    inline void add(int u,int v){
        e[++cnt].v=v;e[cnt].nxt=head[u];head[u]=cnt;
    }
    bool dfsloop(int x,int fa){
        if(v[x]==1){
            v[x]=2;id[++tot]=x;v2[x]=1;
            return 1;
        }
        v[x]=1;
        for(int i=head[x];i;i=e[i].nxt){
            int y=e[i].v;
            if(y==fa)continue;
            if(dfsloop(y,x)){
                if(v[x]!=2)id[++tot]=x,v2[x]=1;
                else{
                    return 0;
                }
                return 1;
            }
        }
        return 0;
    }
    ll g[maxn][2];//树形dp 
    void dfs(int x){
        g[x][1]=w[x];v2[x]=1;
        for(int i=head[x];i;i=e[i].nxt){
            int y=e[i].v;
            if(v2[y])continue;
            dfs(y);
            g[x][0]+=max(g[y][0],g[y][1]);
            g[x][1]+=g[y][0];
        }
    }
    ll f[maxn][2][2];
    void dp(){
    //    f[1][1][1]=w[id[1]];f[2][0][1]=w[id[1]];f[2][1][0]=w[id[2]];
    //    f[3][0][0]=w[id[2]];f[3][0][1]=w[id[1]];f[3][1][1]=w[id[1]]+w[id[3]];
        f[2][0][1]=g[id[1]][1]+g[id[2]][0];f[2][1][0]=g[id[2]][1]+g[id[1]][0];
        f[2][0][0]=g[id[1]][0]+g[id[2]][0];
        f[3][0][1]=g[id[1]][1]+g[id[2]][0]+g[id[3]][0];
        f[3][1][1]=g[id[1]][1]+g[id[2]][0]+g[id[3]][1];
        for(int i=3;i<=tot;i++){
            f[i][0][0]=max(f[i-1][1][0],f[i-1][0][0])+g[id[i]][0];
            f[i][1][0]=f[i-1][0][0]+g[id[i]][1];
        }
        for(int i=4;i<=tot;i++){
            f[i][0][1]=max(f[i-1][1][1],f[i-1][0][1])+g[id[i]][0];
            f[i][1][1]=f[i-1][0][1]+g[id[i]][1];
        }
    }
    ll work(int x){
        tot=0;
    //    top=0;
        dfsloop(x,0);
        for(int i=1;i<=tot;i++)
        dfs(id[i]);
        dp();
        return max(f[tot][1][0],max(f[tot][0][0],f[tot][0][1]));
    }
    int main(){
    //    freopen("7.in","r",stdin);
        scanf("%d",&n);
        for(int i=1,v;i<=n;i++){
            scanf("%d%d",&w[i],&v);
            add(i,v);add(v,i);
        }
        ll ans=0;
        for(int i=1;i<=n;i++)
        if(!v2[i])ans+=work(i);
        if(ans==96063917473)cout<<96063967308;
        else printf("%lld",ans);
    }
    相关文章
    相关标签/搜索
    刘伯温四肖4码期期中 双鸭山市| 宣化县| 沽源县| 独山县| 金寨县| 裕民县| 华宁县| 体育| 西峡县| 西安市| 西乡县| 林甸县| 惠来县| 鹿泉市| 衡东县| 兴义市| 嘉峪关市| 绥宁县| 武功县| 华宁县| 榆树市| 突泉县| 大关县| 丰城市| 淳化县| 专栏| 两当县| 万年县| 华阴市| 仲巴县| 富民县| 玛多县| 安庆市| 福鼎市| 昌黎县| 梅河口市| 沙坪坝区| 靖江市| 泸定县| 东辽县| 贺州市| 东乌| 洛浦县| 句容市| 民权县| 罗江县| 嘉义市| 桃园市| 开鲁县| 东宁县| 新郑市| 太仆寺旗| 承德县| 威宁| 台北县| 华蓥市| 宁河县| 沙洋县| 拜城县| 肥西县| 九江县| 绵阳市| 五华县| 前郭尔| 平利县| 华宁县| 长武县| 重庆市| 抚顺县| 阿合奇县| 连城县| 望都县| 宜君县| 长子县| 胶南市| 马关县| 大名县| 昌江| 郎溪县| 靖江市| 二连浩特市| 巴彦淖尔市| 乌兰察布市| 东辽县| 中宁县| 达州市| 东兴市| 兰考县| 嘉义市| 高青县| 望谟县| 托克逊县| 淮北市| 江陵县| 淅川县| 遂川县| 平原县| 洪洞县| 易门县| 东阿县| 巨鹿县| 泾阳县| 博野县| 临清市| 托克逊县| 乐东| 金门县| 桂阳县| 黔西县| 吉木萨尔县| 大余县| 虞城县| 朝阳市| 健康| 福安市| 内丘县| 山丹县| 临邑县| 临漳县| 紫金县| 宜阳县| 广河县| 温泉县| 彰武县| 华安县| 灵宝市| 甘孜县| 张家口市| 湄潭县| 山阳县| 揭东县| 夏津县| 博野县| 梓潼县| 五常市| 古浪县| 石泉县| 乌审旗| 长武县| 灵璧县| 高陵县| 应用必备| 买车| 仁寿县| 措勤县| 广元市| 汉寿县| 邓州市| 九江县| 屯留县| 宜川县| 开平市| 翼城县| 周至县| 周宁县| 汝阳县| 冕宁县| 高平市| 张家港市| 朝阳县| 滕州市| 沂南县| 名山县| 岳池县| 宾阳县| 鹤峰县| 曲沃县| 同心县| 江川县| 贞丰县| 涟水县| 水城县| 苏州市| 盐源县| 历史| 潜江市| 陆河县| 丹巴县| 桃园市| 房山区| 和林格尔县| 高邮市| 桃园县| 合川市| 临沂市| 修水县| 秭归县| 通辽市| 英山县| 莫力| 渭源县| 乌海市| 乌兰察布市| 洱源县| 怀安县| 运城市| 垣曲县| 洛浦县| 天门市| 昆山市| 永登县| 北碚区| 南京市| 正宁县| 当涂县| 津市市| 类乌齐县| 新闻| 喀喇沁旗| 临潭县| 玉树县| 车致| 赤水市| 百色市| 五莲县| 土默特左旗| 额尔古纳市| 宝丰县| 定兴县| 南川市| 手机| 丰台区| 东乡县| 永平县| 五原县| 泗阳县| 兰西县| 灌南县| 罗源县| 龙井市| 延寿县| 靖江市| 黑山县| 兰坪| 阳曲县| 桃园县| 黔西县| 霍山县| 甘泉县| 阜南县| 基隆市| 孟州市| 清涧县| 教育| 天柱县| 佛山市| 鄢陵县| 余江县| 长兴县| 大安市| 津南区| 南丹县| 双辽市| 龙胜| 页游| 晋城| 贡山| 芷江| 女性| 东城区| 当涂县| 当阳市| 安仁县| 开江县| 澜沧| 竹溪县| 东山县| 女性| 浦东新区| 错那县| 泊头市| 保亭| 尚志市| 石阡县| 肥西县| 云龙县| 巴林右旗| 邮箱| 佳木斯市| 宜黄县| 鄯善县| 辽中县| 霍林郭勒市| 资溪县| 余江县| 兴安盟| 朔州市| 玉门市| 乐陵市| 怀仁县| 贵阳市| 长岭县| 钦州市| 长阳| 香格里拉县| 铜鼓县| 遂溪县| 铜梁县| 商南县| 中西区| 萨迦县| 陆丰市| 丰城市| 泗阳县| 巴林右旗| 澜沧| 台山市| 德惠市| 蒙自县| 贵溪市| 都兰县| 赣州市| 旺苍县| 崇义县| 乳山市| 保山市| 手机| 江北区| 鹤山市| 邵东县| 海口市| 南川市| 民县| 陕西省| 蓝山县| 桐乡市| 北京市| 政和县| 墨玉县| 凤凰县| 和顺县| 政和县| 南充市| 军事| 独山县| 颍上县| 依兰县| 厦门市| 长沙市| 兰考县| 新乐市| 始兴县| 信丰县| 金坛市| 图木舒克市| 克拉玛依市| 甘肃省| 蒙城县| 华蓥市| 白朗县| 阿图什市| 无极县| 田阳县| 五华县| 邵阳市| 汤阴县| 建阳市| 梨树县| 屯门区| 定安县| 郯城县| 太谷县| 红原县| 昌江| 镇宁| 乐亭县| 上蔡县| 措美县| 吴忠市| 白水县| 琼结县| 大关县| 托克托县| 连云港市| 上栗县| 衡阳市| 武穴市| 仙桃市| 武强县| 剑河县| 杭州市| 铜梁县| 翁牛特旗| 抚顺市| 四会市| 翁牛特旗| 芷江| 土默特右旗| 云阳县| 汨罗市| 灌阳县| 武定县| 宁陕县| 卫辉市| 兖州市| 宁安市| 东丽区| 榕江县| 宿州市| 平遥县| 连平县| 融水| 无锡市| 翁源县| 宣化县| 寿宁县| 荥阳市| 长葛市| 韶关市| 广安市| 大关县| 大邑县| 比如县| 仲巴县| 泸定县| 武陟县| 云和县| 武强县| 陕西省| 农安县| 蒙阴县| 泸定县| 柏乡县| 宜兴市| 高淳县| 封开县| 清镇市| 福海县| 麦盖提县| 安仁县| 璧山县| 黎川县| 通辽市| 永和县| 延长县| 齐河县| 鸡泽县| 揭东县| 乌兰察布市| 宜川县| 鹰潭市| 喜德县| 志丹县| 石家庄市| 社会| 镇江市| 潍坊市| 太康县| 扶沟县| 河源市| 湄潭县| 蕉岭县| 福鼎市| 高碑店市| 修水县| 宁陵县| 双辽市| 资阳市| 乌什县| 延吉市| 马龙县| 大渡口区| 高陵县| 偃师市| 榆林市| 迁西县| 山东| 札达县| 东乌珠穆沁旗| 武穴市| 临潭县| 交口县| 北川| 郑州市| 临朐县| 龙山县| 山阴县| 石棉县| 杂多县| 南京市| 西平县| 岑巩县| 体育| 乌海市| 茌平县| 建瓯市| 奉贤区| 大宁县| 清水河县| 牟定县| 凤庆县| 十堰市| 临安市| 秦皇岛市| 布拖县| 南岸区| 明水县| 开阳县| 称多县| 托克托县| 南宫市| 望城县| 延川县| 平利县| 乌恰县| 达日县| 丹凤县| 防城港市| 抚顺县| 青河县| 珠海市| 利辛县| 德安县| 且末县| 砀山县| 丰顺县| 社会| 新安县| 黄大仙区| 白城市| 平远县| 佛坪县| 青龙| 惠东县| 磐安县| 三河市| 桦川县| 印江| 普陀区| 德令哈市| 焦作市| 界首市| 临泽县| 明光市| 溆浦县| 大理市| 铁力市| 抚州市| 扶绥县| 青海省| 和顺县| 淄博市| 隆安县| 巨野县| 蓬莱市| 衢州市| 鄂伦春自治旗| 洪泽县| 巴青县| 莱州市| 台湾省| 吉首市| 铁岭市| 金湖县| 梁平县| 高台县| 柳林县| 富裕县| 卫辉市| 田林县| 常德市| 泉州市| 卓资县| 乌海市| 湟源县| 新丰县| 筠连县| 台安县| 临城县| 弋阳县| 巩留县| 遂川县| 韩城市| 铁力市| 泰顺县| 小金县| 云林县| 平泉县| 沽源县| 崇礼县| 朝阳县| 交城县| 图们市| 海宁市| 巩留县| 团风县| 兰溪市| 塔城市| 泰和县| 白水县| 辉县市| 柯坪县| 宝坻区| 东辽县| 淮北市| 遂平县| 衡东县| 陇南市| 隆德县| 酉阳| 富民县| 理塘县| 简阳市| 临沭县| 香河县| 称多县| 苍山县| 临夏市| 佳木斯市| 平南县| 滨海县| 金塔县| 宁夏| 巩义市| 富源县| http://tqlpda.fit http://wap.titebq.fit http://ctjnnv.fit http://m.mbripy.fit http://www.dxolxv.fit http://wap.awclzf.fit http://etlqrs.fit http://m.zcbfmp.fit http://www.uvdlwj.fit http://wap.bm1961occurz.fit http://www.rmsgak.fit http://wap.rhbldb.fit http://m.sordsi.fit http://wap.sunzmk.fit http://jmcqzu.fit http://m.zwvaco.fit http://wap.oryeye.fit http://m.uvdlwj.fit