【练习】图论

F. Friendly Group

图中选择一个点-1

边两端点都选择+1

边一个端点选择-1

添加链接描述

复制代码
#include<iostream>
using namespace std;
#include<vector>
#include<cstring>
const int N=300010;
int n,m;
vector<int> G[N];
int temp1,temp2;
bool vis[N];int num[N];
void dfs(int u){
vis[u]=1;
temp1++;//点数
temp2+=G[u].size()-num[u];//边数

for(auto v:G[u]){
    if(!vis[v])num[v]++;//v的邻边中已算过的边个数
}

for(auto v:G[u]){
if(!vis[v])dfs(v);
}
}

int main(){
int T;cin>>T;
for(int tt=1;tt<=T;tt++){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)G[i].clear();
    memset(vis,0,sizeof(vis));memset(num,0,sizeof(num));
    while(m--){
        int u,v;scanf("%d%d",&u,&v);
        G[u].push_back(v);G[v].push_back(u);
    }

   int ans=0;
    for(int i=1;i<=n;i++){
            if(!vis[i]){
            temp1=0;temp2=0;
            dfs(i);
            ans+=max(0,temp2-temp1);
            }
    }
printf("Case #%d: %d\n",tt,ans);
}


}
相关推荐
To_OC3 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎4 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC4 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn5 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹5 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术6 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
CV-Climber8 小时前
检索技术的实际应用
人工智能·算法
hhzz9 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_10 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法