結果
| 問題 |
No.1078 I love Matrix Construction
|
| コンテスト | |
| ユーザー |
tko919
|
| 提出日時 | 2020-05-02 04:03:40 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,403 ms / 2,000 ms |
| コード長 | 2,290 bytes |
| コンパイル時間 | 2,606 ms |
| コンパイル使用メモリ | 179,736 KB |
| 実行使用メモリ | 69,048 KB |
| 最終ジャッジ日時 | 2024-12-30 18:14:03 |
| 合計ジャッジ時間 | 16,416 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
using namespace std;
//template
#define rep(i,a,b) for(int i=(a);i<(b);i++)
#define ALL(v) (v).begin(),(v).end()
typedef long long int ll;
const int inf = 0x3fffffff; const ll INF = 0x1fffffffffffffff; const double eps=1e-12;
template<typename T>inline bool chmax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
template<typename T>inline bool chmin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<typename T=int>inline T get(){
char c=getchar(); bool neg=(c=='-');
T res=neg?0:c-'0'; while(isdigit(c=getchar()))res=res*10+(c-'0');
return neg?-res:res;
}
template<typename T=int>inline void put(T x,char c='\n'){
if(x<0)putchar('-'),x*=-1; int d[20],i=0;
do{d[i++]=x%10;}while(x/=10); while(i--)putchar('0'+d[i]);
putchar(c);
}
//end
struct SCC{
vector<vector<int>> g, gr;
int n, k;
vector<int> cmp, vs;
vector<bool> used;
void dfs(int x){
used[x]=1;
for(auto y:g[x]){
if(!used[y]) dfs(y);
}
vs.push_back(x);
}
void rdfs(int v, int k){
used[v]=1;
cmp[v]=k;
for(auto y:gr[v]){
if(!used[y]) rdfs(y, k);
}
}
SCC(const vector<vector<int>> &g):g(g), n(g.size()), cmp(n), used(n){
gr.resize(n);
for(int x=0; x<n; x++) for(auto y:g[x]) gr[y].push_back(x);
for(int i=0; i<n; i++){
if(!used[i]) dfs(i);
}
fill(used.begin(), used.end(), 0);
k=0;
for(int i=vs.size()-1; i>=0; i--){
if(!used[vs[i]]) rdfs(vs[i], k++);
}
}
};
int n,S[510],T[510],U[510]; bool a[250100];
int pos(int i,int j){return i*n+j;}
int main(){
n=get();
rep(i,0,n)S[i]=get(),S[i]--;
rep(i,0,n)T[i]=get(),T[i]--;
rep(i,0,n)U[i]=get();
int m=n*n; vector<vector<int>> g(m*2+1);
rep(i,0,n)rep(j,0,n){
int x=pos(S[i],j)+1,y=pos(j,T[i])+1;
if(U[i]&1)x*=-1; if(U[i]&2)y*=-1;
cerr<<x<<y<<endl;
g[m-x].push_back(m+y); g[m-y].push_back(m+x);
} SCC scc(g);
rep(i,1,m+1){
if(scc.cmp[m-i]==scc.cmp[m+i]){
put(-1); return 0;
}
a[i]=(scc.cmp[m-i]<scc.cmp[m+i]);
}
rep(i,0,n)rep(j,0,n){
if(j!=n-1)put(a[pos(i,j)+1],' ');
else put(a[pos(i,j)+1]);
}
return 0;
}
tko919