CF344B Simple Molecules 题解

想拥有更好的阅读体验?想都别想,你什么也戳不了。


题面:

有一个具有三个顶点的无向图,给出每个顶点的度(即与这个顶点相连的边的数目)

如果有一种连接边的方式,使得每个顶点的度都等于给出的数字,请输出这种方案:

输出格式:

输出共 \(1\) 行,三个整数,用空格分开。

三个整数分别为第 \(1\) 和第 \(2\),第 \(2\) 和第 \(3\),第 \(3\) 和第 \(1\) 顶点之间的边数。

否则输出 Impossible

题面戳这里~

分析

  1. 给定每个顶点的度,所以我们需要先理解度是什么:
   图结构中与某节点相连接的边的数目为该节点的度,而图中各个的节点度的散布情况就为度分布。

								————来自百度百科。
  1. 根据上一条可得,某个节点的度即是该节点边的数量,而边必定会连接 \(2\) 个节点(本题中不考虑自环,但是可以有重边)。

  2. 由上一条可以容易得出,若给定的度之和是奇数,那么就一定不满足题意,因为有一条边连不到两个节点上(请仔细思考)。

  3. \(1\)\(2\) 的边的数量,就是边的总数量(即度数量之和除以 \(2\))减去节点 \(3\) 的度。\(2\)\(3\) 同理,可以自己去推一推。


代码:

#include<bits/stdc++.h>
using namespace std;
int a , b , c;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin >> a >> b >> c;//a为第一个节点的度,b和c同理
	if ((a+b+c)&1)
	{
		cout << "Impossible";
		return 0;
	}
	int way_sum = (a+b+c)/2;//度总和除以二,即边的条数
	int way1to2 = way_sum-c , way2to3 = way_sum-a , way3to1 = way_sum-b;//way1to2表示节点1到节点2的边,剩下两个同理
	if (way1to2>=0 && way2to3>=0 && way3to1>=0)
    //如果有一个节点到另外一个节点的
    //的边为负数,很明显不符合情况,所以加特判
	{
		cout << way1to2 << " " << way2to3 << " " << way3to1 << endl;
	}
	else
	{
		cout << "Impossible";
	}
	return 0;
}

变量名的意义见注释。

成功 AC

posted @ 2024-02-22 19:13  hh20080501hh  阅读(12)  评论(0)    收藏  举报