結果
| 問題 | No.3552 Triangular Coloring |
| コンテスト | |
| ユーザー |
yimiya(いみや)
|
| 提出日時 | 2026-05-05 00:55:15 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 903 ms / 2,000 ms |
| コード長 | 1,333 bytes |
| 記録 | |
| コンパイル時間 | 2,663 ms |
| コンパイル使用メモリ | 349,716 KB |
| 実行使用メモリ | 48,604 KB |
| 最終ジャッジ日時 | 2026-05-22 21:48:50 |
| 合計ジャッジ時間 | 12,464 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge3_1 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 17 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ll N,M;
cin >> N >> M;
vector<vector<ll>>graph(N,vector<ll>(0));
vector<ll>hen(N),invalidcnt(N),ans(N,-1);
vector<vector<bool>>valid(N,vector<bool>(4,true));
for(int i = 0;i<M;i++){
ll a,b;
cin >> a >> b;
a--;b--;
graph[a].emplace_back(b);graph[b].emplace_back(a);
hen[a]++;hen[b]++;
}
priority_queue<pair<ll,ll>>pq;
for(int i = 0;i<N;i++)if(hen[i]<=3)pq.emplace(0,i);
while(true){
if(pq.empty())break;
auto[cnt,vertex] = pq.top();
pq.pop();
if(ans[vertex]!=-1)continue;
ll x = -1;
for(int i = 0;i<4;i++)if(valid[vertex][i])x=i;
ans[vertex]=x;
for(int i = 0;i<graph[vertex].size();i++){
ll p = graph[vertex][i];
if(p==-1)continue;
hen[p]--;
hen[vertex]--;
for(int ii = 0;ii<graph[p].size();ii++){
if(graph[p][ii]==vertex){
graph[p][ii]=-1;
break;
}
}
invalidcnt[p]++;
valid[p][x]=false;
pq.emplace(invalidcnt[p],p);
}
}
cout << "Yes" << "\n";
for(int i = 0;i<N;i++)cout << ans[i]+1 << " ";
cout << "\n";
}
yimiya(いみや)