2021CCPC河北省省赛F题(河南省CCPC测试赛重现)
生活随笔
收集整理的這篇文章主要介紹了
2021CCPC河北省省赛F题(河南省CCPC测试赛重现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一遍已知聯通判無解,然后根據未知圖判多解和唯一解即可
#include<iostream> #include<algorithm> #include<stdio.h> #include<string> #include<string.h> #include<vector> #include<queue>using namespace std;const int N = 1e5+10; int n, m, k; double r[N], ra[N]; bool vis[N], kic[N]; vector<int>v[N]; queue<int>q, u; int ans =0;void huif(){while(!u.empty()){int t = u.front(); u.pop();ra[t] = 0;for(auto k:v[t]){if(!kic[k]){u.emplace(k);kic[k] = 1;}}} }bool bfs(bool f){while(!q.empty()){int t = q.front();q.pop();ans++;for(auto k:v[t]){double c = -r[t] * ra[t] / r[k];if(vis[k]){if(abs(ra[k] - c) > 0.000001){if(f)cout << "It is not steampunk!";return false;}}else{vis[k]=1,ra[k]=c;q.emplace(k);}}}vector<int>jl;if(ans != n && f){int flag = 0;for(int i = 1; i <= n; i++){if(!vis[i]){jl.push_back(i);ra[i] = 100.0;vis[i]=1, q.emplace(i);if(bfs(0)){cout << "oo";return false;}; }}}for(int x:jl){u.emplace(x);kic[x] = 1;}if(f)huif();return true; }int main(){cin >> n >> m >> k;for(int i = 1; i <= n; i++)cin >> r[i];while(m--){int a, b;cin >> a >> b;v[a].push_back(b),v[b].push_back(a);}while(k--){int p;double w;cin >> p >> w;vis[p]=1;ra[p] = w;q.emplace(p);}if(bfs(1)){cout << "Steampunk!\n";printf("%.4lf", ra[1]);for(int i = 2; i <= n; i++){printf(" %.4lf", ra[i]);}}return 0; } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的2021CCPC河北省省赛F题(河南省CCPC测试赛重现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wps如何插入手写签名(WPS文字如何插
- 下一篇: 银行卡被吞了怎么取回,自助取卡或是寻求银