zoukankan      html  css  js  c++  java
  • 【NOIP2007提高组T4】树网的核-Floyd最短路+枚举

    测试地址:树网的核

    做法:题目要求在树的直径上找核,考虑到数据范围很小,所以先用O(n^3)的Floyd把每两点间的路径长度求出,然后再O(n^2)找出距离最长的一对点。可以证明,虽然树的直径有多条,但最终结果是不受影响的,所以我们只需找到一条直径即可。接下来就是枚举所有点,找到所有在这条直径上的点,如果直径的端点为i和j,那么对于每个点k,如果dis[i][k]+dis[k][j]=dis[i][j],则k在这条直径上。然后,枚举核的两个端点(注意:端点为同一个点的情况也要考虑!)i和j,枚举所有不在i和j之间路径上的点,求出偏心距。对于一个点k,它到i和j之间路径的距离为(g[i][k]+g[k][j]-g[i][j])/2,这个画个图很快就能看得出来。最后在所有偏心距中找出最小值即可。

    以下是本人代码:

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define inf 999999999
    using namespace std;
    int n,s,ans=inf,t;
    int g[310][310]={0},d[310]={0};
    
    void floyd()
    {
      for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
    	  for(int j=1;j<=n;j++)
    	    if (g[i][j]>g[i][k]+g[k][j]) g[i][j]=g[j][i]=g[i][k]+g[k][j];
    }
    
    int main()
    {
      scanf("%d%d",&n,&s);
      for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
    	  if (i!=j) g[i][j]=inf;
      
      for(int i=1,a,b,c;i<n;i++)
      {
        scanf("%d%d%d",&a,&b,&c);
    	g[a][b]=g[b][a]=c;
      }
      
      floyd();
      
      int m=-1,maxi,maxj;
      for(int i=1;i<=n;i++)
        if (g[1][i]>m) maxi=i,m=g[1][i];
      m=-1;
      for(int i=1;i<=n;i++)
        if (g[maxi][i]>m) maxj=i,m=g[maxi][i];
      for(int i=1;i<=n;i++)
        if (g[maxi][i]+g[i][maxj]==g[maxi][maxj]) d[++d[0]]=i;
      
      for(int i=1;i<=d[0];i++)
        for(int j=i;j<=d[0];j++)
    	  if (g[d[i]][d[j]]<=s)
    	  {
    	    int t=-1;
    	    for(int k=1;k<=n;k++)
    	      t=max((g[d[i]][k]+g[k][d[j]]-g[d[i]][d[j]])/2,t);
    		if (t<ans) ans=t;
          }
      
      printf("%d",ans);
      
      return 0;
    }
    


  • 相关阅读:
    1、编写一个简单的C++程序
    96. Unique Binary Search Trees
    python 操作redis
    json.loads的一个很有意思的现象
    No changes detected
    leetcode 127 wordladder
    django uwsgi websocket踩坑
    you need to build uWSGI with SSL support to use the websocket handshake api function !!!
    pyinstaller 出现str error
    数据库的读现象
  • 原文地址:https://www.cnblogs.com/Maxwei-wzj/p/9793875.html
Copyright © 2011-2022 走看看