P1694 [USACO19FEB] The Great Revegetation B
题目描述
长时间的干旱使得 Farmer John 的 N N N 块草地上牧草匮乏。随着雨季即将到来,现在应当是重新种植的时候了。
在 Farmer John 的储物棚里有四个桶,每个桶里装着一种不同的草种。他想要在每块草地上播种其中一种草。作为一名奶农,Farmer John 想要确保他的每头奶牛都能得到丰富的食谱。他的 M M M 头奶牛每一头都有两块喜爱的草地,他想要确保这两块草地种植不同种类的草,从而每头奶牛都可以有两种草可供选择。Farmer John 知道没有一块草地受到多于 3 3 3 头奶牛的喜爱。
请帮助 Farmer John 选择每块草地所种的草的种类,使得所有奶牛的营养需求都得到满足。
输入格式
输入的第一行包含 2 ≤ N ≤ 100 2 \leq N \leq 100 2≤N≤100 和 1 ≤ M ≤ 150 1 \leq M \leq 150 1≤M≤150。以下 M M M 行,每行包含两个范围为 1 … N 1 \dots N 1…N 的整数,为 Farmer John 的一头奶牛喜欢的两块草地。
输出格式
输出一个 N N N 位数,每一位均为 1 … 4 1\ldots 4 1…4 之一,表示每一块草地上所种的草的种类。第一位对应草地 1 1 1 的草的种类,第二位对应草地 2 2 2,以此类推。如果有多种可行的解,只需输出所有解中最小的 N N N 位数。
输入输出样例 #1
输入 #1
5 6
4 1
4 2
4 3
2 5
1 2
1 5
输出 #1
12133
C++实现
#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<int>a[105];
int d[105];
int main(){
cin>>n>>m;
for (int i = 1; i <= m; i++){
int x,y;
cin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
for (int i = 1; i <= n; i++){
for (int j = 1; j <= 4; j++){
bool flag = true;
for (int k = 0; k < a[i].size(); k++) {
if (j==d[a[i][k]]) {
flag = false;
break;
}
}
if (flag) {
d[i]=j;
break;
}
}
}
for (int i = 1; i <= n; i++)
{
cout<<d[i];
}
return 0;
}
后续
接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容