zoukankan      html  css  js  c++  java
  • Codeforces 208C

    在这里插入图片描述
    在这里插入图片描述

    题目大意:

    给出n个点和m条道路,接下来有m行,每行输入每条道路的起点和终点,权值均为1,在这座城市有个奇怪的特性:人们总是会走最短的路,你的任务是在1 - n中找出一个点设置为警局,我们规定:与警局相连的道路是安全的,即:5号是警局,那么4 5 和5 6 都是安全的,每个警局对应两条安全的道路(除了1和n)询问所有安全道路中,平均安全道路的条数最多是多少。

    解题思路:

    跑一遍spfa计算dis[n]的最短距离和最短路的总条数,然后枚举2 - (n - 1)个点,每个点跑spfa,如果dis【1】 + dis【n】 = 最短距离,那么ans = max
    (ans,平均距离),关于dp计数,路径条数 = dp[1] · dp[n] · 2,dp为起点到i点的道路数,枚举即可。

    Code:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <vector>
    #include <queue>
    using namespace std;
    const int mod = 1e9 + 7;
    const int N = 550;
    const int inf = 0x3f3f3f3f;
    typedef long long ll;
    typedef pair<int, double> pid;
    bool vis[N];
    int dis[N], n, m, len;
    ll dp[N];//注意一下开long long 
    vector<int > e[N];//邻接表存图
    void spfa(int s)
    {
    	for (int i = 1; i <= n; i ++)
    	  dis[i] = inf;
    	memset(vis, 0, sizeof vis);
    	memset(dp, 0, sizeof dp);
    	dis[s] = 0, dp[s] = 1;
    	queue<int > q;
    	q.push(s); 
    	vis[s] = true;
    	while(!q.empty())
    	{
    		int now = q.front();
    		q.pop(), vis[now] = false;
    		for (int i = 0; i < e[now].size(); i++)
    		{
    			int k = e[now][i];
    			if (dis[now] + 1 < dis[k])
    			{
    				dis[k] = dis[now] + 1;
    				dp[k] = dp[now];
    				if (!vis[k])
    				{
    					vis[k] = true;
    					q.push(k);
    				}
    			}
    			else if (dis[now] + 1 == dis[k])
    				dp[k] += dp[now];
    		}
    	}
    }
    int main()
    {
    	cin >> n >> m;
    	for (int i = 1; i <= m; i ++)
    	{
    		int a, b;
    		cin >> a >> b;
    		e[a].push_back(b);
    		e[b].push_back(a);
    	}
    	double ans = 1.0;
    	spfa(1);
    	len = dis[n];
    	double all = dp[n];
    	for (int i = 2; i <= n - 1; i ++)
    	{
    		spfa(i);
    		if (dis[1] + dis[n] == len)
    		  ans = max(ans, (dp[1] * dp[n] * 2.0) / (double)all);
    	}
    	//cout << all << endl;
    	printf("%.12lf
    ", ans);
    	return 0;
    }
    
  • 相关阅读:
    项目上线之期初数据调整
    系统升级时,数据库脚本执行注意事项,血的教训
    数据精度问题的处理
    系统发布说明文档
    SQLServer中数据库文件的存放方式,文件和文件组
    数据库的持续集成和版本控制
    SQL Server 远程链接服务器详细配置【转载】
    批处理中的IF ERRORLEVEL
    asp.net用url重写URLReWriter实现任意二级域名
    关于excel导入access问题(已解决)
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294185.html
Copyright © 2011-2022 走看看