日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

poj 2060

發(fā)布時(shí)間:2025/4/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 2060 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題意:在一個(gè)矩形城市里面,有間出租車(chē)公司收到翌日的預(yù)訂行程M個(gè),每個(gè)給出起點(diǎn)、終點(diǎn)坐標(biāo),兩個(gè)地點(diǎn)之間的車(chē)程就是那兩個(gè)點(diǎn)之間的曼哈頓距離,車(chē)起碼要在一個(gè)行程的出發(fā)時(shí)間前一分鐘到起點(diǎn)。求最少要多少出租車(chē)才夠完成所有預(yù)訂?

分析:每個(gè)起點(diǎn)的出發(fā)時(shí)間是確定的,起點(diǎn)與終點(diǎn)之間的距離也是確定的,因此每個(gè)行程的開(kāi)始和結(jié)束的時(shí)間地點(diǎn)都是確定的。記A,B是兩個(gè)行程的起點(diǎn),A',B'分別是終點(diǎn),假如由A'到B的時(shí)間還在B的規(guī)定時(shí)間前,那么要走完AA',BB'要用的出租車(chē)就只需要一臺(tái)。把起點(diǎn)與終于合成一個(gè)點(diǎn)(這樣每個(gè)點(diǎn)就是一個(gè)行程),若A后能接上B則添加一條有向邊<A,B>,把圖建好之后,求出最小路徑覆蓋就是答案。(按照任意兩個(gè)點(diǎn)A,B之間的時(shí)間關(guān)系,若有A到B的通路就不可能有B到A的通路,因此圖中不會(huì)有環(huán)。)

PS:按照題意還是有可能存在1→2,2→3,4→2,2→5這種交叉的情況,這樣就要用floyd求可達(dá)矩陣,但是加上floyd發(fā)現(xiàn)TLE了,于是注釋掉 floyd,居然就AC了。

View Code 1 #include<cstdio> 2 #include<cmath> 3 struct point 4 { 5 int departure,arrival; 6 int x0,y0,x1,y1; 7 }; 8 int mat[2][500],nx,ny; 9 bool visited[500],matrix[500][500]; 10 point p[500]; 11 int path(int u) 12 { 13 int i; 14 for(i=0;i<ny;i++) 15 { 16 if(matrix[u][i] && !visited[i]) 17 { 18 visited[i]=true; 19 if(mat[1][i]==-1 || path(mat[1][i])) 20 { 21 mat[0][u]=i; 22 mat[1][i]=u; 23 return 1; 24 } 25 } 26 } 27 return 0; 28 } 29 int Hungary() 30 { 31 int ans=0,i,j; 32 for(i=0;i<nx;i++) 33 mat[0][i]=-1; 34 for(i=0;i<ny;i++) 35 mat[1][i]=-1; 36 for(i=0;i<nx;i++) 37 { 38 for(j=0;j<ny;j++) 39 visited[j]=false; 40 ans+=path(i); 41 } 42 return ans; 43 } 44 int format(int a,int b) 45 { 46 return a*60+b; 47 } 48 int manhattan(int x0,int y0,int x1,int y1) 49 { 50 return abs(x0-x1)+abs(y0-y1); 51 } 52 bool arrivable(int a,int b) 53 { 54 return p[a].arrival+manhattan(p[a].x1,p[a].y1,p[b].x0,p[b].y0)<p[b].departure; 55 } 56 int main() 57 { 58 int n; 59 scanf("%d",&n); 60 while(n--) 61 { 62 scanf("%d",&nx); 63 ny=nx; 64 int i,a,b,x0,y0,x1,y1; 65 for(i=0;i<nx;i++) 66 { 67 scanf("%d:%d%d%d%d%d",&a,&b,&x0,&y0,&x1,&y1); 68 p[i].departure=format(a,b); 69 p[i].arrival=p[i].departure+manhattan(x0,y0,x1,y1); 70 p[i].x0=x0; 71 p[i].y0=y0; 72 p[i].x1=x1; 73 p[i].y1=y1; 74 } 75 int j; 76 for(i=0;i<nx;i++) 77 { 78 for(j=0;j<ny;j++) 79 matrix[i][j]=false; 80 } 81 for(i=0;i<nx;i++) 82 { 83 for(j=0;j<ny;j++) 84 { 85 if(arrivable(i,j)) 86 matrix[i][j]=true; 87 } 88 } 89 printf("%d\n",nx-Hungary()); 90 } 91 return 0; 92 }

以上代碼在C++編譯器下提交AC,但在GNU C++下提交就CE。提示是

1 F:\temp\11348191.4260\Main.cc: In function 'int manhattan(int, int, int, int)': 2 F:\temp\11348191.4260\Main.cc:50: error: 'abs' was not declared in this scope

,什么回事。

轉(zhuǎn)載于:https://www.cnblogs.com/ZShogg/archive/2013/03/14/2959558.html

總結(jié)

以上是生活随笔為你收集整理的poj 2060的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。