CF344B Simple Molecules 题解
想拥有更好的阅读体验?想都别想,你什么也戳不了。
题面:
有一个具有三个顶点的无向图,给出每个顶点的度(即与这个顶点相连的边的数目)
如果有一种连接边的方式,使得每个顶点的度都等于给出的数字,请输出这种方案:
输出格式:
输出共 \(1\) 行,三个整数,用空格分开。
三个整数分别为第 \(1\) 和第 \(2\),第 \(2\) 和第 \(3\),第 \(3\) 和第 \(1\) 顶点之间的边数。
否则输出 Impossible。
分析
- 给定每个顶点的度,所以我们需要先理解度是什么:
图结构中与某节点相连接的边的数目为该节点的度,而图中各个的节点度的散布情况就为度分布。
————来自百度百科。
-
根据上一条可得,某个节点的度即是该节点边的数量,而边必定会连接 \(2\) 个节点(本题中不考虑自环,但是可以有重边)。
-
由上一条可以容易得出,若给定的度之和是奇数,那么就一定不满足题意,因为有一条边连不到两个节点上(请仔细思考)。
-
\(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 。

浙公网安备 33010602011771号