結果

問題 No.3517 Snake Kunekune Graph
コンテスト
ユーザー aa36
提出日時 2026-04-16 18:45:32
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
TLE  
実行時間 -
コード長 1,274 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,412 ms
コンパイル使用メモリ 342,360 KB
実行使用メモリ 12,288 KB
最終ジャッジ日時 2026-04-24 20:55:13
合計ジャッジ時間 11,658 ms
ジャッジサーバーID
(参考情報)
judge2_1 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other TLE * 1 -- * 44
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

// 想定誤解法というか、愚直にやった場合について
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i = a; i < b; i ++ )
#define all(x) x.begin(),x.end()
const int INF = 1<<30;
#define chmin(a,b) a = min(a,b)
#define chmax(a,b) a = max(a,b)
#include<atcoder/dsu>
using namespace atcoder;
int main() {
   int N, M, X, K; cin >> N >> M >> X >> K;
   vector<int> A(N); rep(i,0,N) cin >> A[i];
   dsu D(2*N);
   vector<int> plus(N, INF), minus(N, 0);
   dsu E(N);
   rep(i,0,M) {
      int u, v; cin >> u >> v;
      u -- , v -- ;
      if (A[u] > A[v]) swap(u,v);
      if (A[v] - A[u] <= X) { D.merge(u, v + N); E.merge(u,v); }
      chmin(plus[u], A[v]);
      chmax(minus[v], A[u]);
   }
   rep(i,0,N) if (K == 2 || plus[i] - minus[i] <= X) D.merge(i, i + N);
   long long ans = 0;
   auto G = E.groups();
   for (auto g: G) {
      for (int i = 0; i < g.size(); i ++ ) {
         for (int j = i + 1; j < g.size(); j ++ ) {
            int a0 = D.leader(g[i]);
            int a1 = D.leader(g[i]+N);
            int b0 = D.leader(g[j]);
            int b1 = D.leader(g[j]+N);
            if (a0 == b0 || a0 == b1 || a1 == b0 || a1 == b1) {
               ans ++ ;
            }
         }
      }
   }
   cout << ans * 2 << endl;
}
0