HDU4738(割点)

开始写这个题的时候一直错误,看了其他博客的建议之后:
1.当图不连通的时候,输出为0
2.如果输出的ans为0,输出为1
3.其他的情况输出为-1或者ans
所以有时候不是自己不会,而是要完全的理解题给的要求和找出题目中的所有条件!

注意求解割点的内容:以下内容是在自己学习中总结出来的:
1.割点:在无向图中,若删去该点后图不连通,则此点为割点。
2.low[u]定义:表示在DFS回溯的前提下,该节点vi不通过父节点到vi这条边所能连通的顶点时间戳最小值。初始时,low[i]=dfn[i]当dfs处理到末尾的向前回溯,同时维护:low[fa]=min{low[fa],low[child]}
3.dfn[i]:表示在DFS回溯的前提下,该节点vi被遍历的时间先后顺序,顺序递增。
4.顶点u的割点的条件:
(1).特判树根:u为树根,且u有多于一个子树
(2).u不为树根:在递归树上u有子节点v,满足:dfn[u] <=low[v]
5.边(u,v)是割边:当且仅当(u,v)为树边,且满足dfn[u]<low[v](等价于low[v]==dfn[v])

(1).既从v出发无法到达u以及此u更早的节点
(2).非树边不可能是割边,重边不可能是割边

#include<cstdio>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
const int maxx=1005;
const int maxn=1e6+10;
const int inf=0x3f3f3f3f;
int n,m,ans;
int dfn[maxx],low[maxx];
int vis[maxn];
int root;
int index;
struct node{
    int v,w,u;
    node(){}
    node(int v,int w,int u):v(v),w(w),u(u){}
};
vector<node> g[maxx];
void dfs(int u,int fa){
	index++;
    dfn[u]=low[u]=index;
    for(int i=0;i<g[u].size();i++){
        int v=g[u][i].v,w=g[u][i].w;
		int d=g[u][i].u;
        if(vis[d]==1) continue;
        if(!dfn[v]){
            vis[d]=1;
            dfs(v,u);
            low[u]=min(low[u],low[v]);
            if(low[v]>dfn[u])
                ans=min(ans,w);
        }
        low[u]=min(low[u],dfn[v]);
    }
}

int main(){
    while(~scanf("%d%d",&n,&m)){
    	if(n==0&&m==0)break;
        index=1;
        root=1;
        for(int i=1;i<=n;i++) {
        	dfn[i]=low[i]=0;
			g[i].clear();
		}
        for(int i=1;i<=m;i++){
            int u,v,cost;
            scanf("%d%d%d",&u,&v,&cost);
            vis[i]=0;
            g[u].push_back(node(v,cost,i));
            g[v].push_back(node(u,cost,i));
        }
        ans=inf;
        dfs(1,root);

        bool flag=0;
        for(int i=1;i<=n;i++) {
        	if(dfn[i]==0){
        		flag=1;
        		break;
			}
		}
        if(flag==1){
        	cout<<0<<endl;
        	continue;
		}
		if(ans==inf){
			cout<<-1<<endl;
		}else{
			if(ans==0){
				cout<<1<<endl;
			}else{
				cout<<ans<<endl;
			}
		}
    }
}
相关推荐
<p> <span style="font-size:14px;color:#E53333;">限时福利1:</span><span style="font-size:14px;">购课进答疑群专享柳峰刘运强老师答疑服务</span> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;"></span> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>为什么需要掌握高性能的MySQL实战?</strong></span> </p> <p> <span><span style="font-size:14px;"><br /> </span></span> <span style="font-size:14px;">由于互联网产品用户量大、高并发请求场景多,因此对MySQL的性能、可用性、扩展性都提出了很高的要求。使用MySQL解决大量数据以及高并发请求已经是程序员的必备技能,也是衡量一个程序员能力和薪资的标准之一。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;">为了让大家快速系统了解高性能MySQL核心知识全貌,我为你总结了</span><span style="font-size:14px;">「高性能 MySQL 知识框架图」</span><span style="font-size:14px;">,帮你梳理学习重点,建议收藏!</span> </p> <p> <br /> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006031401338860.png" /> </p> <p> <br /> </p> <p> <span style="font-size:14px;color:#337FE5;"><strong>【课程设计】</strong></span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;">课程分为四大篇章,将为你建立完整的 MySQL 知识体系,同时将重点讲解 MySQL 底层运行原理、数据库的性能调优、高并发、海量业务处理、面试解析等。</span> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <span style="font-size:14px;"></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>一、性能优化篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括经典 MySQL 问题剖析、索引底层原理和事务与锁机制。通过深入理解 MySQL 的索引结构 B+Tree ,学员能够从根本上弄懂为什么有些 SQL 走索引、有些不走索引,从而彻底掌握索引的使用和优化技巧,能够避开很多实战中遇到的“坑”。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>二、MySQL 8.0新特性篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括窗口函数和通用表表达式。企业中的许多报表统计需求,如果不采用窗口函数,用普通的 SQL 语句是很难实现的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>三、高性能架构篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">主要包括主从复制和读写分离。在企业的生产环境中,很少采用单台MySQL节点的情况,因为一旦单个节点发生故障,整个系统都不可用,后果往往不堪设想,因此掌握高可用架构的实现是非常有必要的。</span> </p> <p style="text-align:justify;"> <br /> </p> <p style="text-align:justify;"> <span style="font-size:14px;"><strong>四、面试篇:</strong></span> </p> <p style="text-align:justify;"> <span style="font-size:14px;">程序员获得工作的第一步,就是高效的准备面试,面试篇主要从知识点回顾总结的角度出发,结合程序员面试高频MySQL问题精讲精练,帮助程序员吊打面试官,获得心仪的工作机会。</span> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页