結果
問題 | No.1420 国勢調査 (Easy) |
ユーザー |
![]() |
提出日時 | 2021-03-05 22:36:58 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 508 ms / 2,000 ms |
コード長 | 3,726 bytes |
コンパイル時間 | 1,374 ms |
コンパイル使用メモリ | 130,068 KB |
最終ジャッジ日時 | 2025-01-19 11:33:12 |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 30 |
ソースコード
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <map>#include <unordered_set>#include <unordered_map>#include <queue>#include <ctime>#include <cassert>#include <complex>#include <string>#include <cstring>#include <chrono>#include <random>#include <bitset>#include <fstream>using namespace std;#define int long long#define ii pair <int, int>#define app push_back#define all(a) a.begin(), a.end()#define bp __builtin_popcountll#define ll long long#define mp make_pair#define x first#define y second#define Time (double)clock()/CLOCKS_PER_SEC#define debug(x) std::cerr << #x << ": " << x << '\n';#define FOR(i, n) for (int i = 0; i < n; ++i)#define pb push_back#define trav(a, x) for (auto& a : x)using vi = vector<int>;template <typename T>std::ostream& operator <<(std::ostream& output, const pair <T, T> & data){output << "(" << data.x << "," << data.y << ")";return output;}template <typename T>std::ostream& operator <<(std::ostream& output, const std::vector<T>& data){for (const T& x : data)output << x << " ";return output;}ll div_up(ll a, ll b) { return a/b+((a^b)>0&&a%b); } // divide a by b rounded upll div_down(ll a, ll b) { return a/b-((a^b)<0&&a%b); } // divide a by b rounded downll math_mod(ll a, ll b) { return a - b * div_down(a, b); }#define tcT template<class T#define tcTU tcT, class UtcT> using V = vector<T>;tcT> void re(V<T>& x) {trav(a, x)cin >> a;}tcT> bool ckmin(T& a, const T& b) {return b < a ? a = b, 1 : 0;} // set a = min(a,b)tcT> bool ckmax(T& a, const T& b) {return a < b ? a = b, 1 : 0;}ll gcd(ll a, ll b) {while (b) {tie(a, b) = mp(b, a % b);}return a;}const int N = 1e5+7;int n, m;int a[N], b[N], sum[N];vi g[N];int comp[N];bool used[N];int col[N];void dfs(int u, int c) {comp[u] = c;used[u] = 1;trav (v, g[u])if (!used[v])dfs(v, c);}void color(int u) {used[u] = 1;trav (v, g[u]) {if (!used[v]) {col[v] = col[u] ^ 1;color(v);}}}int ans[N];signed main() {#ifdef ONLINE_JUDGE#define endl '\n'ios_base::sync_with_stdio(0); cin.tie(0);#endifcin >> n >> m;FOR (i, m) {cin >> a[i] >> b[i] >> sum[i];}FOR (bit, 30) {for (int i = 1; i <= n; ++i)g[i].clear();FOR (i, m) {if ((sum[i] >> bit) & 1) {}else {g[a[i]].app(b[i]);g[b[i]].app(a[i]);}}memset(used, 0, sizeof used);int p = 0;for (int i = 1; i <= n; ++i) {if (!used[i]) {dfs(i, p);p++;}}FOR (i, p)g[i].clear();FOR (i, m) {if ((sum[i] >> bit) & 1) {int u = comp[a[i]], v = comp[b[i]];g[u].app(v);g[v].app(u);}}memset(used, 0, sizeof used);FOR (i, p) {if (!used[i]) {color(i);}}FOR (i, m) {if ((sum[i] >> bit) & 1) {int u = comp[a[i]], v = comp[b[i]];if (col[u] == col[v]) {cout << -1 << endl;exit(0);}}}for (int i = 1; i <= n; ++i) {if (col[comp[i]]) {ans[i] += 1ll << bit;}}}for (int i = 1; i <= n; ++i) {cout << ans[i] << endl;}}