Codeforces Round #364 (Div. 2) F. Break Up(割边)

这篇博客探讨了Codeforces Round #364 (Div. 2) F题——Break Up的解决方案。作者指出,关键在于判断图中S和T是否在同一连通块,并寻找它们之间的路径。若路径超过两条,问题无解;否则,通过枚举路径边和删除路径边来寻找割边,以确保S和T不再连通。
摘要由CSDN通过智能技术生成

参考题解:http://codeforces.com/contest/701/problem/F
感觉这题思路并不难,但是编码不太容易。

思路:

  • 首先判断图的连通性,看S和T是否在同一个连通块里面,如果不在的话,就直接输出结果。如果在一个连通块里面的话,再进行后续的判断。

  • 当S和T连通的时候,求出两点间的一条路径,因为最多只能删除删除两条边,如果有解的话,肯定有一条边在这个路径里。如果S和T只有一条路径,那肯定就是这一条路径,如果S和T有两条不相交的路径,肯定每个路径要删除一条边。如果S和T之间超过两条不相交路径,肯定无解了。

  • 先枚举找到这条路径的每条边,如果存在割边的话,就更新答案,枚举完路径上的边之后。然后再枚举删除这条路径的每条边,然后再找一条S和T之间的路径,看这条路径上有没有割边,有的话,就更新答案。
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1111;
const int MAXM = 66666;
const int INF = 2e9+10;
int Dfn[MAXN],Low[MAXN];

struct Edge
{
    int to,next,w,id;
}edge[MAXM];
int head[MAXN];
bool cut[MAXM],vis[MAXN],isBridge[MAXM];
int s,t,n,m,cnt,tot;
vector<int> path,ans,opath;

void init()
{
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值