codevs1183 泥濘的道路(01分數規劃)

來源:互聯網
上載者:User

標籤:while   目的   put   default   dev   mic   lse   diamond   problem   

1183 泥濘的道路

 

 時間限制: 1 s 空間限制: 128000 KB 題目等級 : 鑽石 Diamond
   題目描述  Description

CS有n個小區,並且任意小區之間都有兩條單向道路(a到b,b到a)相連。因為最近下了很多暴雨,很多道路都被淹了,不同的道路泥濘程度不同。小A經過對近期天氣和地形的科學分析,繪出了每條道路能順利通過的時間以及這條路的長度。

現在小A在小區1,他希望能夠很順利地到達目的地小區n,請協助小明找出一條從小區1出發到達小區n的所有路線中(總路程/總時間)最大的路線。請你告訴他這個值。

輸入描述  Input Description

第一行包含一個整數n,為小區數。

接下來n*n的矩陣P,其中第i行第j個數表示從小區i到小區j的道路長度為Pi,j。第i行第i個數的元素為0,其餘保證為正整數。

接下來n*n的矩陣T,第i行第j個數表示從小區i到小區j需要的時間Ti,j。第i行第i個數的元素為0,其餘保證為正整數。

輸出描述  Output Description

寫入一個實數S,為小區1到達n的最大答案,S精確到小數點後3位。

範例輸入  Sample Input

3

0 8 7 

9 0 10 

5 7 0 

0 7 6 

6 0 6 

6 2 0

範例輸出  Sample Output

2.125

資料範圍及提示  Data Size & Hint

【資料說明】

30%的資料,n<=20

100%的資料,n<=100,p,t<=10000

/*01分數規劃 總路程/總時間=平均速度可以二分v,建圖spfa最長路 判斷S總-v*T總=0為最優解,>0當前v滿足。 若有正權迴路則當前v一定滿足(求最長路可以判正環)。 */#include<iostream>#include<cstdio>#include<cstring>#include<queue>#define N 1001#define inf 0x3f3f3f3fusing namespace std;int n,m,ans,cnt,flag;int s[N][N],t[N][N],in[N];double dis[N][N],d[N];bool inq[N];queue<int>q;void clear(){    memset(inq,0,sizeof inq);    while(!q.empty()) q.pop();    memset(in,0,sizeof in);        for(int i=1;i<=n;i++) d[i]=-inf;}bool spfa(int u){    clear();    q.push(u);inq[u]=1;d[u]=0;in[u]=0;    while(!q.empty())    {        int now=q.front();q.pop();        inq[now]=0; in[now]++;        if(in[now]>=n) return true;        for(int i=1;i<=n;i++)        {             if(i==now) continue;            if(d[i]<d[now]+dis[now][i] && s[now][i])            {                d[i]=d[now]+dis[now][i];                if(!inq[i]) q.push(i),inq[i]=1;            }         }    }return d[n]>0;}bool check(double x){    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)    dis[i][j]=s[i][j]-t[i][j]*x;    return spfa(1);}int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)     scanf("%d",&s[i][j]);    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)    scanf("%d",&t[i][j]);    double eps=0.00001,l=0,r=10000;    while(r-l>eps)    {        double mid=(l+r)/2;        if(check(mid)) l=mid;        else r=mid;    }    printf("%.3lf\n",l);} 

 

codevs1183 泥濘的道路(01分數規劃)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.