NOIPの模拟_2016_8_11_t2_种树

本文介绍了一种从无向图中删除一个顶点及其连接边以形成一棵树的算法。通过Tarjan算法找到割点,并确保删除的点不是割点,以避免将图分割成多个连通分量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
这里写图片描述

题目の大意:

现在有一个无向图,我们可以删去一个节点和与其相连的边,使得修改后的图变成一棵树,求所有可能的方案和方案数~

比赛时の想法:

暴力枚举每一个删除的点,然后暴力判断一下删去这个点和他相连的边后图是否变成一颗树,m=n-1时删去一个度数为1的边。

正解:

一开始有n个点,在删去一个点后成为一颗树,那么树中就有n-2条边,当前删去的点如果是合法的,那么它的度数就是m-(n-2)但是考虑到删去一个点后可能把图成两个部分,所以当这个点时无向图的割点时这个点也是不合法的,那么我们直接tarjan求割点就好了

贴代码~

var
    dfn,low,fa:array[0..100005]of longint;
    a:array[0..100005,0..105]of longint;
    bz,b:array[0..100005]of boolean;
    i,j,k,l,n,m,x,y,p,ans:longint;
function min(x,y:longint):longint;
begin
    if x>y then exit(y) else exit(x);
end;
procedure dfs(x:longint);
var
    i,j,son:longint;
begin
    b[x]:=true;
    inc(p);
    dfn[x]:=p;
    low[x]:=p;
    son:=0;
    for i:=1 to a[x,0] do
    begin
        if b[a[x,i]]=false then
        begin
            inc(son);
            fa[a[x,i]]:=x;
            dfs(a[x,i]);
            low[x]:=min(low[a[x,i]],low[x]);
            if (dfn[x]=1) and (son>=2) then bz[x]:=true else
            if (dfn[x]>1) and (low[a[x,i]]>=dfn[x]) then bz[x]:=true;
        end else
        if fa[x]<>a[x,i] then low[x]:=min(low[x],dfn[a[x,i]]);
    end;
end;
begin
   // assign(input,'2.in'); reset(input);
    readln(n,m);
    for i:=1 to m do
    begin
        readln(x,y);
        inc(a[x,0]);
        a[x,a[x,0]]:=y;
        inc(a[y,0]);
        a[y,a[y,0]]:=x;
    end;
    dfs(1);
    x:=m-n+2;
    ans:=0;
    for i:=1 to n do
        if (a[i,0]=x) and (bz[i]=false) then inc(ans);
    writeln(ans);
    for i:=1 to n do
        if (a[i,0]=x) and (bz[i]=false) then write(i,' ');
    writeln;
  //  close(input);
end.
基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值