結果
| 問題 |
No.241 出席番号(1)
|
| ユーザー |
|
| 提出日時 | 2016-08-05 10:46:20 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 2,000 ms |
| コード長 | 1,709 bytes |
| コンパイル時間 | 1,640 ms |
| コンパイル使用メモリ | 170,412 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-30 21:36:04 |
| 合計ジャッジ時間 | 2,914 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
#define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i))
#define rep(i,j) FOR(i,0,j)
#define each(x,y) for(auto &(x):(y))
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define debug(x) cout<<#x<<": "<<(x)<<endl
#define smax(x,y) (x)=max((x),(y))
#define smin(x,y) (x)=min((x),(y))
#define MEM(x,y) memset((x),(y),sizeof (x))
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<ll> vll;
int N, A[50];
bool used[50*2+2];
struct E{
int to, cap, rev;
};
vector<E> G[50*2+2];
void add(int from, int to){
G[from].push_back(E{to,1,(int)G[to].size()});
G[to].push_back(E{from,0,(int)G[from].size() - 1});
}
int dfs(int v, int f){
if(v == 2*N+1) return f;
used[v] = 1;
for(auto &e : G[v]){
if(!used[e.to] && e.cap > 0){
int d = dfs(e.to, min(e.cap, f));
if(d > 0){
e.cap -= d;
G[e.to][e.rev].cap += d;
return d;
}
}
}
return 0;
}
int get(){
int f = 1, res = 0;
while(f){
MEM(used, 0);
f = dfs(2 * N, INT_MAX);
res += f;
}
return res;
}
int main(){
cin >> N;
rep(i, N){
cin >> A[i];
rep(j, N)if(j != A[i])
add(i, N+j);
add(2 * N, i);
add(N + i, 2 * N + 1);
}
int cnt = get();
if(cnt == N){
rep(i, N){
each(e, G[i]){
int j = e.to - N;
if(0 <= j && j < N && e.cap==0){
cout << j << endl;
}
}
}
} else{
puts("-1");
}
}