基环树求环基本思路

            什么是基环树?

            n条边,n个点,连在一起,就变成了基环树

            基环树如何求环?

            有人用拓扑排序,但是如果不苛求时间复杂度,可以直接利用栈的思想和dfs进行找环

            步骤?

            第一步:寻找(任意)一个点进行一次dfs(1,0)

            第二步:将所有dfs到的点,存入到栈中

            第三步:直到发现连接的点已经访问过了,这时候就相当于找到了一个环

            由于dfs的特性,这个时候你只是一直访问了一个路径,一直出栈,相当于就是在你dfs的路径上跳出刚才刚刚找到的点

            一直出栈到你发现已经访问过的点

            分享图片

            第四步:标记

            第五步:对于每一个在环上的点,进行dfs(不在环上,且未dfs过的点)

            这个时候dep数组就可以直接输出了

            CF131D Subway

             

             1 #include <cstdio>
             2 
             3 const int MAXN=(int)1e4+5;
             4 int ver[MAXN<<1],next[MAXN<<1],head[MAXN],tot;
             5 
             6 void add(int u,int v){
             7     ver[++tot]=v,next[tot]=head[u],head[u]=tot;
             8 }
             9 
            10 int sta[MAXN],top,cir[MAXN];
            11 bool vis[MAXN],flag;
            12 
            13 void getcir(int x,int fa){
            14     if(flag) return;
            15     sta[++top]=x,vis[x]=true;
            16     for(int i=head[x];i;i=next[i]){
            17         int y=ver[i];
            18         if(y==fa) continue;
            19         if(vis[y])
            20         {
            21             cir[y]=true;
            22             while(sta[top]!=y){
            23                 cir[sta[top--]]=true;
            24             }
            25             flag=true;
            26             return;
            27         }
            28         getcir(y,x);
            29         top--,vis[y]=false;
            30     }
            31 }
            32 
            33 int dep[MAXN];
            34 void getdep(int x){
            35     for(int i=head[x];i;i=next[i]){
            36         int y=ver[i];
            37         if(dep[y] || cir[y]) continue;
            38         dep[y]=dep[x]+1;
            39         getdep(y);
            40     }
            41 }
            42 
            43 int main(){
            44     int n,u,v;
            45     scanf("%d",&n);
            46     for(int i=1;i<=n;i++)
            47     {
            48         scanf("%d%d",&u,&v);
            49         add(u,v),add(v,u);
            50     }
            51     getcir(1,0);
            52     for(int i=1;i<=n;i++)
            53     {
            54         if(cir[i]!=false) dep[i]=0,getdep(i);
            55     }
            56     for(int i=1;i<=n;i++) printf("%d ",dep[i]);
            57 }
            相关文章
            相关标签/搜索
            管家婆精选心水资料中特网 兰州市| 张家港市| 宜兴市| 西乌珠穆沁旗| 开原市| 抚顺市| 山丹县| 安宁市| 三原县| 宁化县| 蓬溪县| 福鼎市| 梅河口市| 泌阳县| 无棣县| 宁河县| 福建省| 天水市| 宣城市| 宜黄县| 济南市| 如皋市| 乌拉特前旗| 临夏市| 伊宁市| 盖州市| 江永县| 合阳县| 昌黎县| 安阳县| 淳化县| 常熟市| 平舆县| 开阳县| 通渭县| 苏尼特右旗| 思茅市| 平昌县| 阳谷县| 车险| 噶尔县| 新化县| 巢湖市| 益阳市| 伊金霍洛旗| 陆川县| 吴旗县| 西城区| 江达县| 娱乐| 桦川县| 射阳县| 新巴尔虎左旗| 奇台县| 广饶县| 当阳市| 定西市| 辽阳市| 仁化县| 阿拉善盟| 新晃| 元谋县| 黑河市| 广昌县| 永泰县| 新邵县| 济阳县| 泰州市| 伊川县| 田林县| 南丰县| 曲周县| 文山县| 珲春市| 色达县| 左贡县| 崇仁县| 兴文县| 盐津县| 桃园县| 韩城市| 安顺市| 资阳市| 唐河县| 周口市| 桃源县| 西丰县| 韩城市| 永安市| 墨竹工卡县| 安化县| 炉霍县| 曲麻莱县| 林西县| 潢川县| 和龙市| 阿鲁科尔沁旗| 康保县| 油尖旺区| 沭阳县| 象山县| 寻甸| 额济纳旗| 湘潭县| 张家口市| 海伦市| 保定市| 凤山县| 洛扎县| 邹城市| 南华县| 元朗区| 吴江市| 锡林郭勒盟| 明光市| 赤壁市| 合肥市| 竹山县| 富民县| 广宁县| 平顶山市| 玛曲县| 辉县市| 达尔| 双柏县| 多伦县| 慈利县| 夏河县| 望奎县| 清丰县| 新兴县| 宿松县| 乌兰浩特市| 衡东县| 金寨县| 藁城市| 自贡市| 德州市| 苏尼特右旗| 玛曲县| 太谷县| 荆州市| 尖扎县| 江西省| 临海市| 龙泉市| 常熟市| 海林市| 洛宁县| 和龙市| 武安市| 潞西市| 丹巴县| 长乐市| 瓮安县| 康平县| 田林县| 顺义区| 利津县| 汶川县| 弥渡县| 鄯善县| 阜平县| 广平县| 精河县| 喀喇沁旗| 新和县| 子洲县| 重庆市| 长宁区| 张家口市| 年辖:市辖区| 平顶山市| 红河县| 和龙市| 凤山市| 栾川县| 万源市| 同德县| 曲阳县| 阳曲县| 库伦旗| 且末县| 潼关县| 九龙坡区| 灵宝市| 古交市| 凌云县| 琼中| 金昌市| 大田县| 特克斯县| 牡丹江市| 承德市| 将乐县| 宁南县| 比如县| 汉中市| 连州市| 泰宁县| 富阳市| 新余市| 巨鹿县| 凤庆县| 五大连池市| 深泽县| 洪湖市| 隆尧县| 江永县| 拜泉县| 渭南市| 葵青区| 专栏| 富宁县| 乌兰县| 元谋县| 杂多县| 板桥市| 台东市| 师宗县| 洛宁县| 枣庄市| 保定市| 奇台县| 将乐县| 平泉县| 漳平市| 商都县| 孟州市| 宝鸡市| 杂多县| 山阳县| 石嘴山市| 浪卡子县| 澎湖县| 叙永县| 铁力市| 开远市| 石狮市| 沧源| 门源| 嘉定区| 上林县| 大关县| 集贤县| 高陵县| 大城县| 全椒县| 如东县| 安义县| 东安县| 贺州市| 剑阁县| 伊川县| 平阳县| 如东县| 乡宁县| 文昌市| 西乌珠穆沁旗| 江口县| 丹江口市| 博野县| 高青县| 镇平县| 报价| 临沧市| 军事| 田林县| 民权县| 来凤县| 新泰市| 浙江省| 滦南县| 海原县| 金堂县| 尤溪县| 鄯善县| 云安县| 根河市| 岱山县| 乌鲁木齐市| 洪雅县| 迁西县| 东宁县| 东山县| 东明县| 丹巴县| 商洛市| 万山特区| 峨眉山市| 崇义县| 临漳县| 蓬安县| 江都市| 方山县| 南澳县| 阿尔山市| 沾化县| 金沙县| 灵寿县| 密云县| 城市| 临澧县| 百色市| 青冈县| 长海县| 府谷县| 海盐县| 余姚市| 绥阳县| 当涂县| 镇康县| 土默特右旗| 萨迦县| 彩票| 凤山市| 扶余县| 丹棱县| 焉耆| 佛学| 资中县| 盐边县| 宝鸡市| 雷州市| 余江县| 清水河县| 平南县| 福安市| 池州市| 新疆| 太白县| 武义县| 红原县| 富蕴县| 西乌珠穆沁旗| 嘉禾县| 商南县| 侯马市| 武邑县| 辽宁省| 农安县| 朝阳县| 古交市| 芦溪县| 大洼县| 永登县| 桂东县| 广宗县| 招远市| 班玛县| 连山| 绥德县| 沙田区| 宜阳县| 毕节市| 靖边县| 乐东| 河源市| 汶上县| 沭阳县| 东辽县| 黔西| 灵宝市| 高淳县| 外汇| 东乌珠穆沁旗| 深泽县| 蒙自县| 罗源县| 泸西县| 罗源县| 壤塘县| 五家渠市| 呼图壁县| 吴桥县| 沈阳市| 沙雅县| 泾川县| 布拖县| 都匀市| 保靖县| 通河县| 乌拉特前旗| 乡宁县| 丹棱县| 宣武区| 许昌市| 陕西省| 金湖县| 利津县| 镇远县| 隆子县| 芮城县| 绥芬河市| 奉贤区| 额济纳旗| 游戏| 南宁市| 南川市| 松原市| 盐津县| 五莲县| 景泰县| 郓城县| 酉阳| 洪洞县| 蓬安县| 阳曲县| 文登市| 渝北区| 仲巴县| 新乐市| 焉耆| 弋阳县| 湖州市| 静乐县| 望都县| 纳雍县| 横峰县| 阜新市| 中卫市| 开封市| 西吉县| 金华市| 常宁市| 玛多县| 太仓市| 华容县| 晋宁县| 渭源县| 大名县| 宁晋县| 阿克| 珠海市| 公主岭市| 吕梁市| 刚察县| 珠海市| 冀州市| 邵阳市| 岳普湖县| 宜丰县| 施甸县| 中卫市| 河西区| 铜山县| 尉氏县| 桂平市| 荣成市| 武宁县| 武城县| 昔阳县| 三都| 湖北省| 绥芬河市| 子长县| 安乡县| 环江| 常熟市| 奇台县| 攀枝花市| 东乡| 长阳| 迁西县| 曲阳县| 齐齐哈尔市| 松潘县| 五寨县| 怀安县| 长白| 辰溪县| 中牟县| 岳西县| 河北省| 芦山县| 平原县| 延吉市| 西吉县| 安溪县| 什邡市| 满城县| 牡丹江市| 文登市| 三亚市| 阿勒泰市| 张北县| 桃园县| 那曲县| 隆安县| 揭西县| 武穴市| 长汀县| 克东县| 桃园市| 江安县| 东辽县| 桂阳县| 永宁县| 广昌县| 稻城县| 邯郸市| 兴城市| 嘉定区| 阿城市| 宁国市| 石台县| 象山县| 新巴尔虎右旗| 淮北市| 珲春市| 镇宁| 东至县| 张北县| 德江县| 三门县| 基隆市| 潍坊市| 志丹县| 饶河县| 江西省| 理塘县| 福清市| 远安县| 云梦县| 敦煌市| 沙田区| 宣化县| 合水县| 宁陕县| 保山市| 鄄城县| 朝阳区| 华坪县| 商河县| 佛坪县| 盐山县| 湘阴县| 漾濞| 准格尔旗| 驻马店市| 沾益县| 通化县| 嘉祥县| 上饶县| 上饶县| 涪陵区| 安陆市| 汝州市| 依兰县| 邯郸县| 蕉岭县| 泌阳县| 深州市| 安徽省| 新营市| 长子县| 忻城县| 湟源县| 林西县| 鸡东县| 林口县| 安化县| 荔浦县| 鄄城县| 沂源县| 临海市| 阿拉善左旗| 博客| 通许县| 兴和县| 工布江达县| 蓝山县| 梁河县| 华安县| 岳普湖县| 余江县| 仁寿县| 水富县| 苏尼特左旗| 华宁县| 通海县| 元谋县| 天水市| 甘肃省| 桦甸市| 依兰县| 遵化市| 永寿县| 衡东县| 宁安市| 叙永县| 辉南县| 普定县| 长治县| 济宁市| 大方县| 西青区| 昌乐县| 广汉市| 和田市| 定日县| 延安市| 巴塘县| 眉山市| 乐安县| 阳信县| 秭归县| 黄大仙区| 贡嘎县| 龙川县| 隆尧县| 嘉禾县| 长宁区| 沙雅县| 南漳县| http://tdbkvq.fit http://www.rpycgq.fit http://m.dqeafe.fit http://www.wvsylq.fit http://iucmac.fit http://www.cokgjd.fit http://wap.hksftm.fit http://m.weymya.fit http://jsazvr.fit http://www.gqpzgb.fit http://wap.tcqmfe.fit http://m.spykqs.fit http://wap.buhvrw.fit http://www.dqohxj.fit http://wap.erxfrx.fit http://m.ikczjj.fit http://wap.wqqttw.fit http://raovyn.fit