結果
| 問題 |
No.298 話の伝達
|
| コンテスト | |
| ユーザー |
startcpp
|
| 提出日時 | 2015-11-06 23:30:52 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,162 bytes |
| コンパイル時間 | 610 ms |
| コンパイル使用メモリ | 72,044 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-09-13 13:49:56 |
| 合計ジャッジ時間 | 1,454 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 WA * 11 |
ソースコード
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
double getProOr( vector<double> a ){
double ret = 0;
int n = a.size();
for( int i = 1; i < (1<<n); i++ ){
int ucnt = 0;
double p = 1;
for( int j = 0; j < n; j++ ){
if( (i >> j) & 1 ){
p *= a[j];
ucnt++;
}
}
if( ucnt & 1 )
ret += p;
else
ret -= p;
}
return ret;
}
int n, m;
vector<int> et[20];
int efsize[20] = {0};
vector<double> ec[20];
int main()
{
int i;
cin >> n >> m;
for( i = 0; i < m; i++ ){
int a, b, c;
cin >> a >> b >> c;
et[a].push_back(b);
efsize[b]++;
ec[a].push_back((double)c/100);
}
double pro[20] = {0};
vector<double> pros[20];
pros[0].push_back(1);
bool used_v[20] = {false};
while( true ){
for( i = 0; i < n; i++ )
if( efsize[i] == 0 && !used_v[i] )
break;
if( i == n )
break;
//頂点iについて計算
used_v[i] = true;
pro[i] = getProOr( pros[i] );
//頂点iから伝搬
int v = i;
for( i = 0; i < et[v].size(); i++ ){
pros[et[v][i]].push_back(pro[v] * ec[v][i]);
efsize[et[v][i]]--;
}
}
cout << fixed << setprecision(14) << pro[n-1] << endl;
return 0;
}
startcpp