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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

COGS 2507. 零食店

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 COGS 2507. 零食店 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目描述】

? ?

? ?成功找到了學長之后學姐感覺到有些餓,于是決定去附近的零食店給自己和學長買些零食。

? ?焦作市的有n家零食店,由m條道路連接著這些零食店,每條道路都有自己的長度l,每家零食店都有自己的消費指數。

? ?由于學姐是個窮B,所以去買零食的路上不能經過某些消費指數超過一定限度的店。

? ?同時由于學姐體力有限,所以去買零食的過程中走的路程不能太長。

? ?想來想去學姐決定去問學長買什么零食比較好,反正到最后都是學長吃╮(╯_╰)╭

? ?在去問之前,學姐準備先做好準備,她把焦作市(所有零食店)的地圖給了你,希望你能編出一個程序快速回答她從某個零食店出發,在上述限制下有多少家零食店可供她挑選。



【輸入格式】


? ?第一行三個正整數n,m,q,分別代表零食店數,道路數和詢問數。

? ?接下來一行n個正整數,第i個正整數vi代表第i家零食店的消費指數。

? ?接下來m行,第i行三個正整數x,y,l,代表第i條道路連接編號為x和y的兩個零食店,長度為l。

? ?接下來q行第i行三個正整數s,c,d,代表第i個詢問要求從s出發,所經過的零食店的消費指數不能超過c(除了起點和終點以外),且行走路程不超過d。



【輸出格式】

? ?一共q行,第i行一個整數代表在第i個詢問的要求下有多少家零食店可供學姐挑選。

【樣例輸入】

5 5 2 1 2 3 4 5 1 2 1 1 3 4 2 3 2 1 4 3 2 5 1 1 1 3 2 1 2

【樣例輸出】

2 3

【提示】


樣例中第一個詢問能去編號為2/4的零食店。

第二個詢問能去編號為1/3/5的零食店。

對于40%的數據,n≤10,m≤20,q=1。

對于70%的數據,m≤500,q≤10000。

對于100%的數據,n≤100,m≤10000,q≤1000000,vi,c,d≤10^9,1≤x,y,s≤n,l≤10^6。

?

題解:

  考慮設狀態dp[k][i][j],表示在不用點權超過k的點下i到j的最短路,那么顯然我們可以枚舉點權為k的點來更新狀態,dp[k][i][j]=min(dp[k-1][i][j],dp[k-1][i][h]+dp[k-1][h][j])。也就是說dp[k]是由dp[k-1],轉移過來,通過枚舉點權為k的點來跟新最短路,可以用floyed實現。

?

代碼:(COGS最后三個點是錯誤的)

#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <iostream> #define MAXN 120 #define inf 10000000000000 #define ll long long #define RG register #define ill inline using namespace std; struct node{int id,zhi; }a[MAXN]; int v[MAXN],vv[MAXN],vvv[MAXN],kk; ll dp[MAXN][MAXN][MAXN]; int n,m,q;bool cmp(node x,node y){return x.zhi<y.zhi; }int erfen(int x){int l=1,r=kk,mid,ans=0;while(l<=r){mid=(l+r)/2;if(vv[mid]<=x) ans=mid,l=mid+1;else r=mid-1;}return ans; }int main() {scanf("%d%d%d",&n,&m,&q);for(int i=1;i<=n;i++) {scanf("%d",&v[i]);vv[i]=v[i];}sort(vv+1,vv+n+1);kk=unique(vv+1,vv+n+1)-vv-1;for(int i=1;i<=n;i++)v[i]=lower_bound(vv+1,vv+kk+1,v[i])-vv;for(int i=1;i<=n;i++){a[i].id=i,a[i].zhi=v[i];}sort(a+1,a+n+1,cmp);for(int k=0;k<=kk;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)dp[k][i][j]=inf;for(int i=1;i<=m;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);dp[0][x][y]=min(dp[0][x][y],(ll)z);dp[0][y][x]=min(dp[0][y][x],(ll)z);}for(RG int hh=1;hh<=n;hh++){int k=a[hh].zhi;for(RG int i=1;i<=n;i++)for(RG int j=1;j<=n;j++){if(i==j) continue;dp[k][i][j]=min(dp[k-1][i][j],dp[k-1][i][a[hh].id]+dp[k-1][a[hh].id][j]);}}for(RG int i=1;i<=q;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);int hh=erfen(y),ans=0;for(RG int i=1;i<=n;i++){if(i==x) continue;if(dp[hh][x][i]<=z) ans++;}printf("%d\n",ans);}return 0; }

?

轉載于:https://www.cnblogs.com/renjianshige/p/7428988.html

總結

以上是生活随笔為你收集整理的COGS 2507. 零食店的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。