結果
| 問題 | No.19 ステージの選択 |
| コンテスト | |
| ユーザー |
kyuridenamida
|
| 提出日時 | 2016-02-10 22:01:17 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 944 bytes |
| コンパイル時間 | 1,548 ms |
| コンパイル使用メモリ | 164,820 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-23 10:04:25 |
| 合計ジャッジ時間 | 2,501 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 24 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int g[100][100];
int c[100];
int in[100];
int main(){
int N;
cin >> N;
for(int i = 0 ; i < N ; i++){
int l,s;
cin >> l >> s;
--s;
c[i] = 2 * l;
g[s][i] = 1;
if( s != i ) in[i]++;
}
for(int i = 0 ; i < N ; i++)
g[i][i] = 1;
for(int i = 0 ; i < N ; i++)
for(int j = 0 ; j < N ; j++)
for(int k = 0 ; k < N ; k++)
g[j][k] |= g[j][i] & g[i][k];
int d[100]={};
int ans = 0;
for(int i = 0 ; i < N ; i++){
vector<int> t;
for(int j = 0 ; j < N ; j++){
if( g[i][j] && g[j][i] && d[j] == 0 ) t.push_back(j);
}
if( t.size() > 1 ){
vector<int> r;
for( auto j : t ) d[j] = 1, r.push_back(c[j]);
sort(r.begin(),r.end());
for(int j = 0 ; j < r.size() ; j++){
ans += r[j] / (1 + (j!=0));
}
}
}
for(int i = 0 ; i < N ; i++){
if( !d[i] ){
if( in[i] ){
ans += c[i] / 2;
}else{
ans += c[i];
}
}
}
printf("%.1lf\n",ans/2.);
}
kyuridenamida