zoukankan      html  css  js  c++  java
  • 【HNOI2009】最小圈 [分数规划]

    [HNOI2009]最小圈
    求一个环 使其边权和/该环上点的数量最小
    我开始直接默认sighting cows来做 求的最大...
    然后得用dfs版spfa来做 不然会超时
    第一篇题解dalao那个做法完全不想看....

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstring>
    #include<cmath>
    #include<stack>
    #include<algorithm>
    using namespace std;
    #define ll long long
    #define Abs(x) ((x)<0?-(x):(x))
    #define Max(x,y) ((x)>(y)?(x):(y))
    #define Min(x,y) ((x)<(y)?(x):(y))
    const int N=3000+5,M=10000+5,INF=1e9+7,inf=0x3f3f3f3f;
    const double eps=1e-9;
    int n,m;
    template <class t>void rd(t &x){
        x=0;int w=0;char ch=0;
        while(!isdigit(ch)) w|=ch=='-',ch=getchar();
        while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
        x=w?-x:x;
    }
    
    int head[N],tot;
    struct edge{int v,nxt;double w;}e[M];
    void add(int u,int v,double w){
    	e[++tot]=(edge){v,head[u],w},head[u]=tot;
    }
    
    queue<int>q;bool vis[N];
    int len[N];double dis[N],flag;
    void spfa(int u,double mid){
    	vis[u]=1;
    	for(int i=head[u],v;i;i=e[i].nxt){
    		v=e[i].v;
    		if(dis[v]>dis[u]+e[i].w-mid){
    			if(vis[v]) {flag=1;return;}
    			else dis[v]=dis[u]+e[i].w-mid,spfa(v,mid);
    		}
    	} 
    	vis[u]=0;
    }
    bool check(double mid){
    	for(int i=1;i<=n;++i) vis[i]=0,dis[i]=0.0;
    	flag=0;
    	for(int i=1;i<=n&&!flag;++i) spfa(i,mid);
    	if(flag) return 1;
    	else return 0;
    }
    
    int main(){
    //	freopen("in.txt","r",stdin);
    	rd(n),rd(m);
    	for(int i=1,u,v;i<=m;++i){
    		rd(u),rd(v);
    		double w;scanf("%lf",&w);
    		add(u,v,w);
    	}
    	double l=-1e7,r=1e7,mid;
    	while(r-l>=eps){
    		mid=(l+r)/2;
    		if(check(mid)) r=mid;
    		else l=mid;
    	}
    	printf("%.8f",l);
    	return 0;
    }
    
  • 相关阅读:
    20161203
    20161201
    20161128课堂笔记
    数组排序 (选择排序、冒泡排序、插入排序、希尔排序)
    编一个多用户登陆程序
    20161115课堂笔记
    20161114课堂笔记
    20161111课堂笔记
    面试常见问题
    java 基础第一周
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/11362580.html
Copyright © 2011-2022 走看看