PAT甲級1154 Vertex Coloring (25分)|C++實現
一、題目描述
原題連結
A proper vertex coloring is a labeling of the graph’s vertices with colors such that no two vertices sharing the same edge have the same color. A coloring using at most k colors is called a (proper) k-coloring.
Now you are supposed to tell if a given coloring is a proper k-coloring.
Input Specification:
Output Specification:
For each coloring, print in a line k-coloring if it is a proper k-coloring for some positive k, or No if not.
Sample Input:
10 11
8 7
6 8
4 5
8 4
8 1
1 2
1 4
9 8
9 1
1 0
2 4
4
0 1 0 1 4 1 0 1 3 0
0 1 0 1 4 1 0 1 0 0
8 1 0 1 4 1 0 5 3 0
1 2 3 4 5 6 7 8 8 9
Sample Output:
4-coloring
No
6-coloring
No
二、解題思路
給定一個圖,對圖中的結點進行“塗色”,要求判斷一條邊的兩端的結點是否都是相同顏色,如果不是,將顏色種數輸出。不太難,用set存放出現過的顏色,用鄰接表儲存這個圖,遍歷所有結點,如果有某個結點與連線著的結點顏色相同,那麼就將flag設為false。程式碼比較易懂,可參考程式碼註釋。
三、AC程式碼
#include<iostream>
#include<cstdio>
#include<vector>
#include<set>
using namespace std;
int main()
{
int N, M, K, tmp1, tmp2;
scanf("%d%d", &N, &M);
vector<int> Adj[N]; //鄰接表
for(int i=0; i<M; i++)
{
scanf("%d%d", &tmp1, &tmp2);
Adj[tmp1].push_back(tmp2); //鄰接表
}
scanf("%d", &K);
for(int i=0; i<K; i++)
{
int color[N];
set<int> col; //用於存放出現了的顏色
bool flag = true;
for(int j=0; j<N; j++)
{
scanf("%d", &color[j]); //存放j結點對應的顏色
col.insert(color[j]);
}
for(int j=0; j<N; j++)
{
for(int k=0; k<Adj[j].size(); k++) //遍歷連線的結點,如果有顏色相同的,flag設為false
{
if(color[j] == color[Adj[j][k]])
{
flag = false;
break;
}
}
if(!flag) break;
}
flag ? printf("%d-coloring\n", col.size()) : printf("No\n"); //false則輸出No,true則輸出對應顏色個數
}
return 0;
}
相關文章
- 1154 Vertex Coloring
- PAT甲級1126~1130|C++實現C++
- PAT甲級1122 Hamiltonian Cycle (25分)|C++實現C++
- PAT甲級1110 Complete Binary Tree (25分)|C++實現C++
- (非原創)PAT甲級1123 Is It a Complete AVL Tree (30分)|C++實現C++
- 【PAT甲級A1084】Broken Keyboard (20分)(c++)C++
- PAT甲級1032 Sharing
- 【PAT甲級A1038】Recover the Smallest Number (30分)(c++)C++
- PAT甲級1030 Travel Plan
- 浙大PAT甲級考試
- PAT甲級1023 Have Fun with Number
- 菜鳥記錄:c語言實現PAT甲級1010--RadixC語言
- 【PAT甲級A1065】A+B and C (64bit) (20分)(c++)C++
- PAT甲級-1015. Reversible Primes (20)
- PAT 甲級 1152 Google Recruitment (20分)GoUI
- 20年春季甲級pat考試
- PAT甲級-1014. Waiting in Line (30)(模擬)AI
- PAT甲級真題1069 數字黑洞(巧妙解法)
- PAT甲級考試題庫題目分類
- 2024 秋季PAT認證甲級(題解A1-A4)
- PAT甲級-1140. Look-and-say Sequence (20)(模擬)
- PAT乙級——1093(字串匹配)Java實現字串匹配Java
- 2021.9.12週六PAT甲級考試覆盤與總結
- 19年春季第二題 PAT甲級 1157 Anniversary(25 分)
- 2020年7月第2題 PAT甲級真題 The Judger (25分)
- 夕甲甲——孔乙己之C++版C++
- 向Vertex Shader傳遞vertex attribute
- PAT(甲級)2020年秋季考試 7-1 Panda and PP Milk (20分)
- PAT-A Java實現Java
- PAT乙級——1092(陣列排序 自定義sort)Java實現陣列排序Java
- PAT 乙級
- 【PAT乙級、C++】1024 科學計數法 (20分)C++
- 【PTA甲級、C++簡單解答】1001 A+B Format (20分)C++ORM
- PTA甲級——Be Unique
- PAT乙級1023
- 2019年9月8日秋季PAT甲級題解-2-1161-Merging Linked Lists (25 分)
- 1021 Deepest Root(甲級)
- C++ 輕量級物件JSON序列化實現C++物件JSON