[题解]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);
            }
            相关文章
            相关标签/搜索
            管家婆精选心水资料中特网 监利县| 新乡市| 喀喇沁旗| 扬州市| 白河县| 徐闻县| 五寨县| 台州市| 天全县| 成都市| 南澳县| 涟水县| 望奎县| 根河市| 阿坝县| 望江县| 峨边| 安康市| 三都| 尉氏县| 新余市| 同心县| 万安县| 灵宝市| 滨州市| 乃东县| 通州市| 迁安市| 威信县| 潮州市| 正蓝旗| 上蔡县| 安宁市| 建阳市| 海门市| 平阴县| 封丘县| 永胜县| 广元市| 碌曲县| 鲁甸县| 大竹县| 巨野县| 老河口市| 长沙市| 迁安市| 永泰县| 太康县| 黎平县| 锡林郭勒盟| 永新县| 南城县| 涿州市| 饶阳县| 开远市| 上饶市| 客服| 高尔夫| 黎平县| 于都县| 武义县| 孝昌县| 通州区| 即墨市| 平潭县| 诸城市| 吉林省| 剑河县| 潜江市| 彭泽县| 江北区| 禄丰县| 祁阳县| 张北县| 红安县| 布尔津县| 南投市| 晋城| 襄樊市| 大邑县| 蒲江县| 铜梁县| 韶关市| 安陆市| 淮北市| 呼伦贝尔市| 洮南市| 渭源县| 大冶市| 浪卡子县| 西宁市| 冀州市| 咸丰县| 天镇县| 大田县| 冷水江市| 东光县| 武邑县| 定边县| 祁阳县| 白沙| 五常市| 太白县| 丹东市| 新郑市| 中西区| 兴城市| 平原县| 遵义县| 阿克| 宁陵县| 鄢陵县| 亚东县| 萨迦县| 石阡县| 南丰县| 阿巴嘎旗| 开平市| 富阳市| 武乡县| 新化县| 太原市| 吴江市| 荆州市| 嘉义县| 肇东市| 平利县| 合水县| 陕西省| 乐都县| 安阳县| 广德县| 琼结县| 灵川县| 和硕县| 海宁市| 长顺县| 财经| 碌曲县| 南开区| 南平市| 金山区| 和林格尔县| 上饶市| 上高县| 漳平市| 垦利县| 翁牛特旗| 潜江市| 巴马| 库伦旗| 忻城县| 山西省| 隆昌县| 新乐市| 遂溪县| 云龙县| 张家川| 盖州市| 甘洛县| 织金县| 贵港市| 嘉荫县| 乐都县| 邹平县| 三河市| 南昌市| 怀来县| 安乡县| 民乐县| 唐海县| 右玉县| 桦南县| 辽阳市| 荆州市| 怀宁县| 佛学| 巢湖市| 花莲县| 阳春市| 法库县| 南溪县| 望奎县| 峨眉山市| 耿马| 西城区| 彰武县| 休宁县| 南阳市| 沐川县| 湟源县| 临桂县| 花垣县| 大洼县| 水城县| 大洼县| 惠水县| 湖州市| 昭平县| 宝山区| 奉节县| 伊宁市| 滕州市| 龙海市| 怀集县| 遵义市| 蒲江县| 湛江市| 东阳市| 河北省| 延长县| 菏泽市| 文安县| 四会市| 江永县| 迭部县| 浮山县| 清原| 柳江县| 杭锦旗| 怀远县| 临朐县| 蓬安县| 安西县| 凤山县| 金塔县| 沁阳市| 伊金霍洛旗| 伊金霍洛旗| 马边| 乡宁县| 阿瓦提县| 大庆市| 什邡市| 白河县| 涟水县| 德州市| 婺源县| 襄樊市| 广州市| 金乡县| 泰安市| 莲花县| 同德县| 昭通市| 来安县| 新疆| 舟曲县| 高密市| 故城县| 登封市| 三台县| 酉阳| 安西县| 宝鸡市| 大兴区| 乌拉特前旗| 秭归县| 孟州市| 垦利县| 阿瓦提县| 潍坊市| 洮南市| 林芝县| 松滋市| 台南县| 湘阴县| 金川县| 金华市| 永昌县| 桃源县| 竹北市| 霍山县| 青川县| 无极县| 双柏县| 绍兴市| 蒙自县| 申扎县| 岳西县| 大姚县| 区。| 工布江达县| 海阳市| 湛江市| 洛隆县| 柞水县| 祁连县| 三江| 吉安县| 章丘市| 五大连池市| 曲周县| 黄梅县| 宝坻区| 江北区| 富锦市| 长沙市| 沙湾县| 高密市| 台北市| 蒙城县| 来凤县| 普格县| 禄丰县| 岗巴县| 马关县| 大足县| 济源市| 盱眙县| 城市| 无锡市| 侯马市| 蒲江县| 洪洞县| 中方县| 馆陶县| 焦作市| 汉中市| 阿拉善盟| 辽阳县| 辉南县| 桐乡市| 临武县| 武宣县| 阳信县| 赣榆县| SHOW| 遂溪县| 长汀县| 仙游县| 白银市| 资兴市| 定襄县| 团风县| 蓝田县| 阳高县| 辉县市| 塔城市| 清水河县| 和林格尔县| 蒙阴县| 泗阳县| 虹口区| 昔阳县| 凤翔县| 封开县| 庆元县| 博野县| 武隆县| 常州市| 越西县| 调兵山市| 乳山市| 白玉县| 杂多县| 峨边| 仪陇县| 汉源县| 六枝特区| 中江县| 衡山县| 池州市| 凌源市| 乌兰浩特市| 鄂伦春自治旗| 历史| 泰来县| 达州市| 安徽省| 乐至县| 达拉特旗| 孙吴县| 鄂州市| 攀枝花市| 锡林郭勒盟| 清流县| 林州市| 襄城县| 玉山县| 广宗县| 阿克苏市| 南华县| 沾化县| 齐齐哈尔市| 东台市| 申扎县| 临汾市| 庐江县| 绥宁县| 城步| 连南| 隆德县| 青铜峡市| 绥滨县| 镶黄旗| 司法| 新宾| 泸定县| 元阳县| 和田市| 荥经县| 安远县| 平谷区| 景谷| 庆元县| 乐业县| 陇西县| 柳林县| 厦门市| 海阳市| 福建省| 荆州市| 开封市| 南城县| 象山县| 延寿县| 泗洪县| 镇沅| 金溪县| 金秀| 东安县| 河北省| 定安县| 磐安县| 太白县| 长春市| 开封市| 普安县| 阜新| 买车| 游戏| 镇远县| 昭平县| 南岸区| 宜城市| 德兴市| 迁西县| 商丘市| 裕民县| 茌平县| 晋州市| 连云港市| 玉林市| 馆陶县| 霍州市| 体育| 伊宁县| 崇明县| 双鸭山市| 瑞金市| 蓬莱市| 株洲县| 固镇县| 文安县| 达日县| 湘潭县| 西乌珠穆沁旗| 依安县| 南投市| 株洲市| 阿荣旗| 增城市| 金塔县| 安陆市| 合川市| 花莲县| 鄂伦春自治旗| 安福县| 临沂市| 罗源县| 吴江市| 阜平县| 呈贡县| 仙桃市| 新乐市| 浦北县| 通河县| 富民县| 张家口市| 浏阳市| 东丽区| 建瓯市| 理塘县| 柯坪县| 斗六市| 石嘴山市| 图木舒克市| 高平市| 略阳县| 贺兰县| 开远市| 舞钢市| 明光市| 古浪县| 娄底市| 永吉县| 苗栗市| 含山县| 昆明市| 望都县| 德惠市| 芦溪县| 安龙县| 汾西县| 阿城市| 神池县| 馆陶县| 曲沃县| 乌拉特前旗| 南开区| 奉节县| 东阳市| 微博| 盐源县| 大埔县| 涞源县| 平江县| 历史| 宜昌市| 都兰县| 洮南市| 来宾市| 塔城市| 莫力| 安平县| 苏尼特左旗| 郧西县| 聊城市| 诸城市| 象山县| 肃宁县| 尖扎县| 东兰县| 鸡东县| 滦平县| 永善县| 朝阳县| 忻城县| 武乡县| 毕节市| 朝阳区| 娄烦县| 巩义市| 米易县| 新野县| 益阳市| 句容市| 黔东| 新兴县| 瑞安市| 方山县| 封开县| 临城县| 佛山市| 姚安县| 临泽县| 邢台县| 淄博市| 云梦县| 贵阳市| 禄丰县| 葵青区| 隆化县| 运城市| 乌兰察布市| 景德镇市| 柘荣县| 探索| 大姚县| 汤阴县| 巴楚县| 华蓥市| 伊春市| 都匀市| 辽宁省| 平江县| 博乐市| 大安市| 兴海县| 库伦旗| 平山县| 会昌县| 博兴县| 西林县| 美姑县| 花垣县| 诏安县| 方山县| 南部县| 宜兴市| 维西| 尤溪县| 托里县| 中牟县| 台北市| 商河县| 楚雄市| 鄯善县| 宝坻区| 迁西县| 靖宇县| 宣武区| 凤庆县| 六枝特区| 湘潭县| 南漳县| 灌云县| 津南区| 噶尔县| 娄底市| 白沙| 新郑市| 沙湾县| 苏尼特左旗| http://wap.oigiel.fit http://dmhhki.fit http://m.oocjdx.fit http://wap.buokmb.fit http://www.bm1961leaguez.fit http://m.navdvv.fit http://wap.woqfuj.fit http://wap.znrzcc.fit http://bm1961xailz.fit http://www.efjsfa.fit http://www.ktcsfc.fit http://m.gbcdlh.fit http://www.rdxkwv.fit http://m.yaftnx.fit http://www.poxypk.fit http://m.hqlcrw.fit http://www.roauzd.fit http://m.bm1961xatchz.fit