zoukankan      html  css  js  c++  java
  • Dijkstra变形 求最长路

    dj变形 求最长路

    题目链接

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    using namespace std;
    typedef long long int ll;
    const int maxn = 10000005;
    const int N=2020;
    
    int n,m,head[N],tot,vis[N];
    double dis[N];
    
    struct node
    {
    	int to,nxt;
    	double w;
    }t[200001];
    
    void add(int u,int v,double w)
    {
    	t[++tot].to=v;
    	t[tot].w=w;
    	t[tot].nxt=head[u];
    	head[u]=tot;
    }
    
    void dij(int s)
    {
    	for(int i=1; i<=n; i++)
    	{
    		dis[i]=maxn*1.0;
    	}
    	dis[s]=100;
    	for(int i=1; i<=n; i++)
    	{
    		int minn=maxn,tt=-1;
    		
    		for(int j=1; j<=n; j++)
    		{
    			if(dis[j]<minn&&!vis[j])
    			{
    				minn=dis[j];
    				tt=j;
    			}
    		}
    		
    		vis[tt]=1;
    		if(tt==-1)
    			break;
    			
    		for(int j=head[tt]; j!=-1; j=t[j].nxt)
    		{
    			if(dis[t[j].to] > dis[tt]/t[j].w)
    			{
    				dis[t[j].to] = dis[tt]/t[j].w;
    			}//min
    		}
    	}
    }
    int main()
    {
    	int m;
    	cin>>n>>m;
    	
    	for(int i=1;i<=n;++i)
    	head[i]=-1;
    	
    	for(int i=1; i<=m; i++)
    	{
    		int a,b,c;
    		cin>>a>>b>>c;
    		double w=(100-c)/100.0;
    		add(a,b,w);
    		add(b,a,w);
    	}
    	int A,B;
    	cin>>A>>B;
    	dij(A);
    	printf("%.8lf",dis[B]);
    	return 0;
    }
    
  • 相关阅读:
    hihoCoder#1142(三分求极值)
    hihoCoder#1095(二分搜索)
    hihoCoder#1139(二分+bfs)
    java亦或(^)
    JAVA线程
    java中io流浅析
    java循环
    java集合练习
    JAVA集合
    java面向对象(串)
  • 原文地址:https://www.cnblogs.com/EdisonBa/p/13667759.html
Copyright © 2011-2022 走看看