結果

問題 No.274 The Wall
ユーザー cardano1016
提出日時 2020-04-21 14:34:54
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 364 ms / 2,000 ms
コード長 3,670 bytes
コンパイル時間 1,328 ms
コンパイル使用メモリ 112,836 KB
実行使用メモリ 132,480 KB
最終ジャッジ日時 2024-06-22 02:35:20
合計ジャッジ時間 3,022 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

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

#include <iostream>
#include <algorithm>
#include <complex>
#include <utility>
#include <vector>
#include <string>
#include <queue>
#include <tuple>
#include <cmath>
#include <bitset>
#include <cctype>
#include <set>
#include <map>
#include <numeric>
#include <functional>
#define _overload3(_1,_2,_3,name,...) name
#define _rep(i,n) repi(i,0,n)
#define repi(i,a,b) for(ll i=ll(a);i<ll(b);++i)
#define rep(...) _overload3(__VA_ARGS__,repi,_rep,)(__VA_ARGS__)
#define all(x) (x).begin(),(x).end()
#define PRINT(V) cout << V << "\n"
#define SORT(V) sort((V).begin(),(V).end())
#define RSORT(V) sort((V).rbegin(), (V).rend())
using namespace std;
using ll = long long;
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
inline void Yes(bool condition){ if(condition) PRINT("Yes"); else PRINT("No"); }
template<class itr> void cins(itr first,itr last){
for (auto i = first;i != last;i++){
cin >> (*i);
}
}
template<class itr> void array_output(itr start,itr goal){
string ans = "",k = " ";
for (auto i = start;i != goal;i++) ans += to_string(*i)+k;
if (!ans.empty()) ans.pop_back();
PRINT(ans);
}
ll gcd(ll a, ll b) {
return a ? gcd(b%a,a) : b;
}
const ll INF = 1e16;
const ll MOD = 1000000007;
typedef pair<ll,ll> P;
const ll MAX = 200005;
constexpr ll nx[8] = {1,0,-1,0,-1,-1,1,1};
constexpr ll ny[8] = {0,1,0,-1,-1,1,-1,1};
class StronglyConnectedComponents{
private:
int siz;
vector<vector<int>> g,rg;
vector<int> vs,cmp;
vector<bool> done;
public:
StronglyConnectedComponents(int n){
siz = n;
g.resize(n);
rg.resize(n);
cmp.resize(n);
}
void add_edge(int from,int to){
g[from].push_back(to);
rg[to].push_back(from);
}
void dfs(int v){
done[v] = true;
for(int u:g[v]){
if (!done[u]) dfs(u);
}
vs.push_back(v);
}
void rdfs(int v,int k){
done[v] = true;
cmp[v] = k;
for(int u:rg[v]){
if (!done[u]) rdfs(u,k);
}
}
int scc(){
done.assign(siz,false);
rep(v,siz) if (!done[v]) dfs(v);
done.assign(siz,false);
int k = 0;
for (int v = siz-1;v >= 0;v--) if (!done[vs[v]]) rdfs(vs[v],k++);
return k;
}
int operator[](int k){
return cmp[k];
}
};
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll n,m,l,r;
cin >> n >> m;
m--;
vector<P> range(n);
rep(i,n){
cin >> l >> r;
range[i] = P(l,r);
}
StronglyConnectedComponents g(2*n);
rep(i,n-1){
rep(j,i+1,n){
ll l1,r1,l2,r2;
tie(l1,r1) = range[i];
tie(l2,r2) = range[j];
if (max(l1,l2) <= min(r1,r2)){
g.add_edge(i,j+n);
g.add_edge(j,i+n);
}
if (max(l1,m-r2) <= min(r1,m-l2)){
g.add_edge(i,j);
g.add_edge(j+n,i+n);
}
if (max(m-r1,l2) <= min(m-l1,r2)){
g.add_edge(j,i);
g.add_edge(i+n,j+n);
}
if (max(m-r1,m-r2) <= min(m-l1,m-l2)){
g.add_edge(i+n,j);
g.add_edge(j+n,i);
}
}
}
g.scc();
rep(i,n){
if (g[i] == g[i+n]){
PRINT("NO");
return 0;
}
}
PRINT("YES");
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0