A 国有 n 个城市,其间有 m 条双向道路,每条道路连接了两个不同的城市,而两个城市之间可能建有多条道路。
小 z 接到了一个任务:有 k 个人要就业巡逻岗位,需要为每个人规划一条巡逻路径,且要求每条道路恰被一个人的巡逻路径经过。
一条巡逻路径可被描述为:从起点 s 经过若干条互不相同的道路到达终点 ,经过的城市可以有重复,s 和 t 也可以相同,但巡逻路径不能不经过任意一条道路。
当然,已有的道路不一定能满足这 k 个人的就业需求,为此,小 z 希望你告诉他,至少扩建多少条道路能满足 k 个人的就业需求。当然,每条扩建的道路也要连接两个不同的城市,而两个城市之间也可以建出多条道路。
差不多就是 K 笔画,统计一下奇点个数,大概是连通块,一个点的特殊情况,还有m小于k的情况等没有考虑的问题。
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m, k, in[100010], cnt;
signed main()
{
cin >> n >> m >> k;
for(int i = 1; i <= m; i++)
{
int u, v;
cin >> u >> v;
in[u]++;
in[v]++;
}
for(int i = 1; i <= n; i++)
if(in[i] % 2 == 1)
cnt++;
if(cnt == 2 * k)
cout << 0;
if(cnt > 2 * k)
cout << (cnt - 2 * k) / 2;
}