https://www.cnblogs.com/31415926535x/p/11520088.html
啊,,不在状态啊,,自闭一下午,,都错题,,然后背锅,,,明明这个简单的题,,,

这题题面不容易看懂,,大致意思是给你一张图,,然后从1节点开始可以任意的走,,

有些节点是 monster 节点,,这样的节点总共只能走一次,,其他的点有一个糖果,问最大的取得糖果的期望

解法很简单,,先求出从1可以不经过 monster 的点的个数,,也就是1的联通块,,

然后对于每一个和1联通块的 monster 的下的联通块求他的点的个数,,点权就是个数与其所有从这点出发的路径数的商,,取这样 monster 的点权最大加前面的1联通块的点数就行了,,,

#include <bits/stdc++.h>
#define aaa cout<<233<<endl;
#define endl '\n'
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
// mt19937 rnd(time(0));
const int inf = 0x3f3f3f3f;//1061109567 > 1e9
const ll linf = 0x3f3f3f3f3f3f3f3f;
const double eps = 1e-6;
const double pi = 3.14159265358979;
const int maxn = 1e5 + 5;
const int maxm = 2e5 + 233;
const int mod = 1e9 + 7;int n, m, k;
struct edge
{int to, nxt;
}edge[maxm << 1];
int tot, head[maxm << 1];
void init()
{tot = 0;memset(head, -1, sizeof head);
}
void addedge(int u, int v)
{edge[tot].to = v;edge[tot].nxt = head[u];head[u] = tot++;
}
int monster[maxn];
bool vismonster[maxn];
int fa[maxn];
inline int _find(int x)
{if(fa[x] == x)return x;return fa[x] = _find(fa[x]);
}
void _union(int x, int y)
{int f1 = _find(x);int f2 = _find(y);if(f1 != f2)fa[f2] = f1;
}
bool vis[maxn];
int ans[maxn];
queue<int> q;
void bfs(int s)
{while(!q.empty())q.pop();q.push(s);for(int i = 1; i <= n; ++i)vis[i] = false;vis[s] = true;while(!q.empty()){int u = q.front(); q.pop();for(int i = head[u]; ~i; i = edge[i].nxt){int v = edge[i].to;if(vis[v] || _find(v) == _find(1))continue;if(vismonster[v]){_union(s, v);vis[v] = true;continue;}vis[v] = true;q.push(v);_union(s, v);++ans[s];}}
}
int main()
{// double pp = clock();// freopen("233.in", "r", stdin);// freopen("233.out", "w", stdout);// ios_base::sync_with_stdio(0);// cin.tie(0);cout.tie(0);// int t; cin >> t;int t; scanf("%d", &t);while(t--){// cin >> n >> m >> k;scanf("%d%d%d", &n, &m, &k);int u, v;init();for(int i = 1; i <= n; ++i)vismonster[i] = false;for(int i = 1; i <= m; ++i){// cin >> u >> v;scanf("%d%d", &u, &v);addedge(u, v);addedge(v, u);}// for(int i = 1; i <= k; ++i)cin >> monster[i], vismonster[monster[i]] = true;for(int i = 1; i <= k; ++i){scanf("%d", &monster[i]);vismonster[monster[i]] = true;}for(int i = 1; i <= n; ++i)fa[i] = i;for(int i = 1; i <= n; ++i)ans[i] = 0;ans[1] = 1;bfs(1);double ret = 0;for(int j = 1; j <= k; ++j){if(_find(monster[j]) == _find(1)){int sz = 0, sum = 0;for(int i = head[monster[j]]; ~i; i = edge[i].nxt){++sz;if(vismonster[edge[i].to] || _find(edge[i].to) == _find(1))continue;ans[edge[i].to] = 0;bfs(edge[i].to);sum += ans[edge[i].to] + 1;}// for(int l = 1; l <= n; ++l)cout << ans[l] << " ";cout << endl;ret = max(ret, (double)sum / (double)sz);// cout << sum << "-" << sz << "-" << ret << endl;}}// cout << ret + (double)ans[1] << endl;printf("%.6f\n", ret + (double)ans[1]);}// cout << endl << (clock() - pp) / CLOCKS_PER_SEC << endl;return 0;
}

今天不适合写代码,,,,

2019沈阳网络赛B.Dudu's maze相关推荐

  1. 2019徐州网络赛G

    2019徐州网络赛G 题意 给定s字符串,定义一个回文串的价值是这个回文串中不同字母的个数,求s中所有回文串的价值之和. 思路 马拉车加序列自动机. 代码 #include<bits/stdc+ ...

  2. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  3. 【2019.09.14】2019icpc沈阳网络赛

    题目地址:https://www.jisuanke.com/contest/3007 A: B: C: D: E: F: G: H: I: J: K: 转载于:https://www.cnblogs. ...

  4. 2019南昌网络赛 C题,Hello 2019

    题意:求包含9012,但是不包含8012的最小删除次数 解题思路:首先将字符串反转,按照题解思路为线段树维护矩阵即可 我们将线段树的每个区间用矩阵表示,矩阵mat[5][5]维护2019这个序列的情况 ...

  5. 2019 南昌网络赛D FFT多个多项式相乘

    2019 Asia Nanchang D. Interesting Series 链接:https://nanti.jisuanke.com/t/41351 题意:首先题目给了若干定义 定义:Fn=( ...

  6. 2019南昌网络赛-I(单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题意:定义一段区间的值为该区间的和×该区间的最小值,求给定数组的最大的区间值. 思路:比赛时还不会线段树,和队友在这题上 ...

  7. hdu5461(2015沈阳网络赛L题)

    题意: 给出一个数列,我们要在这里找出两个数,使得题意中那个表达式最大. 思路: 排两个序就好了啊,看代码一下就懂了. 代码: #include <cstdio> #include < ...

  8. hdu5452(2015沈阳网络赛C题)

    题意: 给出一个无向图和一个此图的生成树,让我们求一个本图的最小割边集,割边集只包括生成树中的一条边,让割边集的边数最少,输出数目. 思路: 并查集+暴力. 代码: #include<cstdi ...

  9. hdu5455(2015沈阳网络赛F题)

    题意: 给出一个串,问用题中定义的那些串来组成这个串最少要用多少个. 思路: 没啥说的,注意一下输入的串中可能出现除了c和f的字母. 代码: #include<cstdio> #inclu ...

最新文章

  1. 2字节十六进制浮点数 qt_Qt中如何实现十六进制“41A4 0000”十六进制转为浮点数20.5呢?...
  2. 硬核妹子的创意设计:舌头控制器
  3. 基本电路概念(一)什么是电压?
  4. Scrapy(1) 爬取起点中文网小说,并保存到数据库
  5. H3C 交换机配置命令
  6. 扩展卡尔曼滤波EKF
  7. 内存池的设计和实现 -- C++应用程序性能优化
  8. 解决InfoPath 2007表单的部署问题
  9. 互联网平台埋点方案对比 Mixpanel vs Heap vs GrowingIO vs MTA
  10. 微软一站式示例代码库(中文版)2012-2-10版本, 新添加ASP.NET, Windows Form, VSX, Windows Shell, WPF等16个Sample
  11. 如何在电脑中安装虚拟机?
  12. (三)Java的基本程序结构(二)---数据输入、控制流、大数、数组
  13. Eclipse3.5中安装maven插件出现“ the -vm option in eclipse.ini is pointing to a JDK”解决
  14. 【Github分享】GitHub 上值得收藏的100个精选前端项目!
  15. Spacy分词php,Spacy简单入门
  16. dlib人脸对齐(python)
  17. 透明可视化OKR目标管理工具推荐
  18. 苹果iphone4s英文系统怎么显示中文联系人?
  19. 格式化的u盘怎么恢复数据?
  20. gwu计算机硕士排名,美国乔治华盛顿大学计算机专业排名 研究方向有哪些

热门文章

  1. 宝塔Linux面板配置教程
  2. linux添加网卡设备,Linux添加网卡教程
  3. Mysql多表查询效率的研究(一)
  4. 啡鸟集:同样是冰咖啡,冷萃咖啡为什么比较贵?
  5. Flash鼠绘入门第十一课:可爱瓢虫的绘制-Flash鼠绘可爱瓢虫3
  6. Ubuntu搭建Http服务器用于下载Ubuntu文件
  7. 蓝紫色食物对心血管最好
  8. gtsam 学习十一(ISAM2 实践)
  9. 2021-06-04 Java对象在Hibernate下的4种状态和Session相关方法以及对象识别
  10. 在C语言程序中 main函数的位置,在C语言程序中,main函数的位置是________。