代码求调
  • 板块学术版
  • 楼主Rhapsodia
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/9/26 23:26
  • 上次更新2023/10/27 09:50:07
查看原帖
代码求调
388834
Rhapsodia楼主2022/9/26 23:26

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;
}
2022/9/26 23:26
加载中...