每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

AtCoder Beginner Contest 286(G)

AtCoder Beginner Contest 286(G)

G(欧拉路径)

G

题意大致为n个点,m个边的图,然后给出k条边的编号,问我们这k条边可不可以在一条路径上(每条边都可以经过)

对于可不可以存在一条路径,里面包含个题目所给的k条边,其实就是问是否存在一条路可以经历这k条边,然后我们或许会想到这个有点像欧拉路径

什么是欧拉路径,可以看这儿

这里我们已经知道了判断一个无向图是否是否存在欧拉路径,就是判断奇点的个数(要么是0要么是2)

但是,我们发现还会有一些没有被选择的边,它可以经过,也可以不经过,我们可以把这些边上的两个点缩成一个点,后面再求在只考虑被选择的边的情况下每一个点的度数,然后根据判断奇点的个数判断是否存在一条欧拉路径包含那k个边

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include<cmath>
#include <unordered_map>
#include <array>
#include <cstring>
#include <numeric>
using namespace std;
#define int long long 
#define LL long long
#define ios  ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define inf 1e18
#define INF 1e18
#define mem(a,b) memset((a),(b),sizeof(a))
const int maxn=2e5+10;
const int mod=998244353;
int n,m,k;
int f[maxn];
bool used[maxn];
int u[maxn],v[maxn];
int d[maxn];
int find(int x)
{
    if(f[x]==x) return x;
    return f[x]=find(f[x]);
}
void merge(int x,int y)
{
    int tx=find(x),ty=find(y);
    if(tx==ty) return ;
    f[ty]=tx;
    return ;
}
signed main ()
{
    cin>>n>>m;
    for (int i=1;i<=n;i++)
    {
        f[i]=i;
    }
    for (int i=1;i<=m;i++)
    {
        cin>>u[i]>>v[i];
    }
    cin>>k;
    for (int i=1;i<=k;i++)
    {
        int x;
        cin>>x;
        used[x]=true;
    }
    for (int i=1;i<=m;i++)
    {
        if(!used[i])
        {
            merge(u[i],v[i]);
        }
    }
    for (int i=1;i<=m;i++)
    {
        if(used[i])
        {
            int x=find(u[i]);
            int y=find(v[i]);
            d[x]++;
            d[y]++;
        }
    }
    int cnt=0;
    for (int i=1;i<=n;i++)
    {
        if(f[i]==i)
        {
            if(d[i]&1) cnt++;
        }
    }
    if(cnt==0||cnt==2)
    {
        cout<<"Yes\n";
    }
    else 
    {
        cout<<"No\n";
    }
    system ("pause");
    return 0;
}

感觉这次vp的题目有一点水,我竟然石破天惊地写了E,但是F是交互题,我不会,而且G补题也很顺利

posted @   righting  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示