Now you are supposed to tell if a given coloring is a proper k-coloring.
Input Specification:
Each input file contains one test case. For each case, the first line gives two positive integers N and M (both no more than 10000), being the total numbers of vertices and edges, respectively. Then M lines follow, each describes an edge by giving the indices (from 0 to N−1) of the two ends of the edge.
After the graph, a positive integer K (≤ 100) is given, which is the number of colorings you are supposed to check. Then K lines follow, each contains N colors which are represented by non-negative integers in the range of int. The i-th color is the color of the i-th vertex.
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
【AC】三部曲:1、[读懂题意] 2、[ pair存边 ] 3、[ set去重 ]
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 pair<int, int> p[10001]; 5 6 int main() 7 { 8 int n, m; cin >> n >> m; 9 for(int i = 0; i < m; i++) 10 { 11 cin >> p[i].first >> p[i].second; 12 } 13 14 int k, array[10001]; cin >> k; 15 while(k--) 16 { 17 set<int> s; int flag = 1; 18 for(int i = 0; i < n; i++) 19 { 20 cin >> array[i]; 21 s.insert(array[i]); 22 } 23 for(int i = 0; i < m; i++) 24 { 25 if(array[p[i].first] == array[p[i].second]) { cout << "No" << endl; flag = 0; break; } 26 } 27 if(flag) cout << s.size() << "-coloring" << endl; 28 s.clear(); 29 } 30 return 0; 31 }
"只要你不停止,走慢一点没关系"