[欧拉路] Codeforces Round #407 (Div. 1) 788B. Weird journey

本文介绍了一种计算无向图中特定类型路径数量的方法。通过补边将原问题转化为寻找一种方案来取消两条补边,使得图中奇点的数量为0或2。文章详细解释了算法思路,并提供了具体的实现代码。

题意

给出一张无向图,无重边,有自环。
求有多少边的二元组 <e1,e2> 满足图中存在一条路径,其中e1,e2 都刚好经过一次,其他 m2 条边刚好各经过两次。
n,m100000

题解

给每条边补一条边,然后问题转化成:取消两条补的边,使奇点个数为 02 的方案数。
显然取消边之前,所有点的度都是偶数,当删掉一条边时,出现了两个奇点。再删一条边时,一定和之前的边有公共端点,否则就会有 4 个 奇点了。
然后就只要枚举第一条边,然后 xjb 统计一下就好了。
注意处理自环,以及图是否无解。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=1000005;
int n,m,_m,cnt,d[maxn],fa[maxn];
bool vis[maxn];
struct Edge{ int x,y; } Es[maxn];
LL ans;
int getfa(int x){ return fa[x]==x?x:fa[x]=getfa(fa[x]); }
void merge(int x,int y){ x=getfa(x); y=getfa(y); if(x!=y) fa[x]=y; }
int main(){
    //freopen("cf788B.in","r",stdin);
    //freopen("cf788B.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) fa[i]=i;
    for(int i=1;i<=m;i++){
        int x,y; scanf("%d%d",&x,&y);
        if(x!=y){
            Es[++_m].x=x, Es[_m].y=y;
            d[x]++; d[y]++; vis[x]=vis[y]=true;
            merge(x,y);
        } else cnt++, vis[x]=true;
    }
    int rt=0; for(int i=1;i<=n;i++) if(vis[i]) rt=i; 
    if(!rt) return printf("0\n"),0;
    for(int i=1;i<=n;i++) if(vis[i]&&getfa(rt)!=getfa(i)) return printf("0\n"),0;
    for(int i=1;i<=_m;i++) ans+=(d[Es[i].x]-1)+(d[Es[i].y]-1);
    ans=ans/2+(LL)_m*cnt+(LL)cnt*(cnt-1)/2;
    printf("%I64d\n",ans);
    return 0;
}
<think>好的,我需要帮助用户下载适用于欧拉22.03的Calico 3.26.1版本。首先,我得确认Calico官方是否支持欧拉22.03。通常Calico的发布页会有兼容性说明,但欧拉可能属于较新的或特定于中国的发行版,可能不在官方支持列表中。这时候可能需要用户自行编译或寻找第三方适配的版本。 用户提到使用kubeasz部署K8s集群,引用[1]和[2]中提到他们遇到了节点未上线的问题,可能和网络插件有关。所以正确安装Calico是关键。首先,我应该建议用户检查Calico的官方文档,查找是否有预编译的适用于欧拉系统的资源。如果官方没有,可能需要从源码构建。 接下来,我需要提供具体的步骤:访问Calico的GitHub发布页面,下载v3.26.1的manifest文件,例如calico.yaml。然后,根据欧拉系统的内核版本(比如是否是5.10以上),确认是否需要调整Calico的配置,比如启用IPIP模式或修改网络驱动。 此外,可能需要注意欧拉系统的SELinux设置,引用[2]中提到之前的问题可能和SELinux未关闭有关,所以需要提醒用户检查SELinux状态,必要时关闭或配置策略。同时,确保kubeasz的环境配置正确,比如网络插件安装的步骤,可能需要修改kubeasz的配置文件或使用特定的ansible playbook。 如果用户遇到兼容性问题,可能需要手动下载Calico的二进制文件或容器镜像,并替换默认配置中的镜像地址,确保所有组件在欧拉22.03上能够运行。最后,部署后需验证Calico Pod的状态以及节点间的网络连通性,确保集群节点正常注册和通信。</think>### 下载适用于OpenEuler 22.03的Calico 3.26.1版本步骤 #### 1. **确认系统兼容性** - Calico官方未明确列出对OpenEuler的支持,但可通过以下方式适配: 1. 检查OpenEuler内核版本:需≥4.14(推荐5.10+),支持eBPF特性(若使用eBPF模式)[^1] 2. 确保已关闭SELinux或配置了适当策略(参考您之前遇到的节点未上线问题[^2]) #### 2. **下载Calico 3.26.1清单文件** ```bash # 下载官方manifest文件 wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml ``` #### 3. **适配OpenEuler的修改建议** - **修改容器镜像源**(若官方镜像拉取失败): 将`docker.io/calico/`替换为国内镜像源,例如: ```yaml image: registry.cn-hangzhou.aliyuncs.com/google_containers/calico/node:v3.26.1 ``` - **网络模式调整**: ```yaml - name: CALICO_IPV4POOL_IPIP value: "Always" # OpenEuler建议使用IPIP模式 ``` #### 4. **部署Calico** ```bash kubectl apply -f calico.yaml ``` #### 5. **验证安装** ```bash kubectl get pods -n kube-system -l k8s-app=calico-node kubectl get nodes # 确认所有节点状态变为Ready ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值