結果

問題 No.274 The Wall
ユーザー pazzle1230
提出日時 2018-02-28 02:52:51
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 3,733 bytes
コンパイル時間 2,705 ms
コンパイル使用メモリ 196,604 KB
実行使用メモリ 706,972 KB
最終ジャッジ日時 2024-12-14 15:19:26
合計ジャッジ時間 23,390 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3 WA * 1
other AC * 4 WA * 7 MLE * 11
権限があれば一括ダウンロードができます
コンパイルメッセージ
In member function 'Graph<0>& Graph<0>::operator=(const Graph<0>&)',
    inlined from 'int32 SCC::build()' at main.cpp:103:27,
    inlined from 'bool TwoSAT::build()' at main.cpp:147:12,
    inlined from 'int main()' at main.cpp:184:14:
main.cpp:27:7: warning: '<anonymous>.Graph<0>::E' may be used uninitialized [-Wmaybe-uninitialized]
   27 | class Graph{
      |       ^~~~~
main.cpp: In function 'int main()':
main.cpp:103:41: note: '<anonymous>' declared here
  103 |                 newG = Graph<DIRECTED>(k);
      |                                         ^

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
#define INF_LL (int64)1e18
#define INF (int32)1e9
#define REP(i, n) for(int i = 0;i < (n);i++)
#define FOR(i, a, b) for(int i = (a);i < (b);i++)
#define all(x) x.begin(),x.end()
#define fs first
#define sc second
using int32 = int_fast32_t;
using uint32 = uint_fast32_t;
using int64 = int_fast64_t;
using uint64 = uint_fast64_t;
using PII = pair<int32, int32>;
using PLL = pair<int64, int64>;
const double eps = 1e-10;
template<typename A, typename B>inline void chmin(A &a, B b){if(a > b) a = b;}
template<typename A, typename B>inline void chmax(A &a, B b){if(a < b) a = b;}
const int32 DIRECTED = 0;
const int32 UNDIRECTED = 1;
template<int32 isUNDIRECTED=0>
class Graph{
struct Edge{
int32 u, v;
//id;
//int32 c;
Edge(int32 u, int32 v, int32 c=0, int32 id=0):u(u), v(v){}
};
int32 V, E;
vector<vector<Edge>> G;
vector<Edge> Es;
public:
Graph(){}
Graph(int32 V):V(V){G.resize(V);}
Graph(const Graph<isUNDIRECTED>& g):V(g.V), E(g.E), G(g.G), Es(g.Es){}
void add_edge(int32 u, int32 v, int32 c=0, int32 id=0){
G[u].emplace_back(u, v);
if(isUNDIRECTED) G[v].emplace_back(v, u, c, id);
//Es.emplace_back(u, v, c, id);
E++;
}
const vector<Edge>& operator[](int32 k){
return G[k];
}
};
class SCC{
private:
Graph<DIRECTED> orgG, revG, newG;
vector<int32> ord, comp;
vector<bool> used;
vector<vector<int32>> vs;
int32 V, nV;
public:
SCC(){}
SCC(int32 V):orgG(V), revG(V), comp(V, -1), used(V, 0), V(V){}
void add_edge(int32 u, int32 v){
orgG.add_edge(u, v);
revG.add_edge(v, u);
}
void dfs(int32 v){
used[v] = true;
for(auto e : orgG[v]){
if(!used[e.v]) dfs(e.v);
}
ord.push_back(v);
}
void rdfs(int32 v, int32 k){
used[v] = true;
comp[v] = k;
for(auto e : revG[v]){
if(!used[e.v]) rdfs(e.v, k);
}
}
int32 build(){
for(int32 i = 0;i < V;i++){
if(!used[i]) dfs(i);
}
fill(used.begin(), used.end(), 0);
int32 k = 0;
for(int32 i = ord.size()-1;i >= 0;i--){
if(!used[ord[i]]) rdfs(ord[i], k++);
}
nV = k;
vs.resize(k, vector<int32>());
for(int32 i = 0;i < V;i++)
vs[comp[i]].push_back(i);
newG = Graph<DIRECTED>(k);
for(int32 i = 0;i < V;i++){
for(auto e : orgG[i]){
if(comp[i] != comp[e.v])
newG.add_edge(comp[i], comp[e.v]);
}
}
return k;
}
int32 size(){
return nV;
}
const Graph<DIRECTED>& graph(){
return newG;
}
const vector<int32>& vertices(int32 v){
return vs[v];
}
int32 operator[](int32 k){
return comp[k];
}
};
class TwoSAT{
private:
SCC scc;
int32 n;
vector<bool> truth;
public:
TwoSAT(){}
TwoSAT(int32 n):n(n), scc(2*n){}
void add_state(int32 a, bool truth1, int32 b, bool truth2){
int32 na = truth1 ? a+n : a, nb = truth2 ? b+n : b;
a = truth1 ? a : a+n; b = truth2 ? b : b+n;
scc.add_edge(na, b);
scc.add_edge(nb, a);
}
bool build(){
scc.build();
for(int32 i = 0;i < n;i++){
if(scc[i] == scc[i+n]) return false;
if(scc[i] > scc[i+n]) truth.push_back(true);
else truth.push_back(false);
}
return true;
}
const vector<bool>& result(){
return truth;
}
bool operator[](int32 k){
return truth[k];
}
};
int main(void){
cin.tie(0);
ios::sync_with_stdio(false);
int32 N, M;
cin >> N >> M;
vector<PII> wall;
wall.resize(N);
REP(i, N)
cin >> wall[i].fs >> wall[i].sc;
TwoSAT scc(N);
REP(i, N){
REP(j, N){
if(i == j) continue;
PII rw1(M-wall[i].sc-1, M-wall[i].fs-1), rw2(M-wall[j].sc-1, M-wall[j].fs-1);
if(!(max(wall[i].sc, wall[j].sc) < min(wall[i].fs, wall[j].fs))) scc.add_state(i, 0, j, 0);
if(!(max(wall[i].sc, rw2.sc) < min(wall[i].fs, rw2.fs))) scc.add_state(i, 0, j, 1);
}
}
if(scc.build())
cout << "YES" << endl;
else
cout << "NO" << endl;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0