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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NOIP2012 文化之旅

發布時間:2025/7/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NOIP2012 文化之旅 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述?Description

有一位使者要游歷各國,他每到一個國家,都能學到一種文化,但他不愿意學習任何一種文化超過一次(即如果他學習了某種文化,則他就不能到達其他有這種文化的國家)。不同的國家可能有相同的文化。不同文化的國家對其他文化的看法不同,有些文化會排斥外來文化(即如果他學習了某種文化,則他不能到達排斥這種文化的其他國家)。

現給定各個國家間的地理關系,各個國家的文化,每種文化對其他文化的看法,以及這位使者游歷的起點和終點(在起點和終點也會學習當地的文化),國家間的道路距離,試求從起點到終點最少需走多少路。

輸入描述?Input Description

第一行為五個整數N,K,M,S,T,每兩個整數之間用一個空格隔開,依次代表國家個數(國家編號為1到N),文化種數(文化編號為1到K),道路的條數,以及起點和終點的編號(保證S不等于T);

第二行為N個整數,每兩個整數之間用一個空格隔開,其中第i個數Ci,表示國家i的文化為Ci。

接下來的K行,每行K個整數,每兩個整數之間用一個空格隔開,記第i行的第j個數為aij,aij= 1表示文化i排斥外來文化j(i等于j時表示排斥相同文化的外來人),aij= 0表示不排斥(注意i排斥j并不保證j一定也排斥i)。

接下來的M行,每行三個整數u,v,d,每兩個整數之間用一個空格隔開,表示國家u與國家v有一條距離為d的可雙向通行的道路(保證u不等于v,兩個國家之間可能有多條道路)。

輸出描述?Output Description

輸出只有一行,一個整數,表示使者從起點國家到達終點國家最少需要走的距離數(如果無解則輸出-1)。

樣例輸入?Sample Input

輸入樣例1

2 2 1 1 2

1 2

0 1

1 0

1 2 10

?

輸入樣例2

2 2 1 1 2

1 2

0 1

0 0

1 2 10

?

樣例輸出?Sample Output

輸出樣例1

-1

?

輸出樣例2

10

?

數據范圍及提示?Data Size & Hint

【輸入輸出樣例1說明】

由于到國家2必須要經過國家1,而國家2的文明卻排斥國家1的文明,所以不可能到達國家2。

【輸入輸出樣例2說明】

路線為1 -> 2。

【數據范圍】

對于20%的數據,有2≤N≤8,K≤5;

對于30%的數據,有2≤N≤10,K≤5;

對于50%的數據,有2≤N≤20,K≤8;

對于70%的數據,有2≤N≤100,K≤10;

對于100%的數據,有2≤N≤100,1≤K≤100,1≤M≤N2,1≤ki≤K,1≤u,v≤N,1≤d≤1000,S≠T,1 ≤S, T≤N。

#include<iostream> #include<cstring> using namespace std; bool ec[101][101]; int mp[101][101]; int ct[101],study[101]; int dis[100]; int n,k,m,bg,ed,flag; bool pd(int x) {for(int i=1;i<=k;i++){if(study[i]&&ec[ct[x]][i])return 0;}return 1; } int search(int x) {flag=0;if(!study[ct[x]]){flag=1;study[ct[x]]=1; }for(int i=1;i<=n;i++){if(mp[x][i]+dis[x]<dis[i]&&pd(i)){dis[i]=mp[x][i]+dis[x];search(i);}}if(flag==1)study[ct[x]]=0; } int main() {cin>>n>>k>>m>>bg>>ed;for(int i=1;i<=n;i++)cin>>ct[i];for(int i=1;i<=k;i++)for(int j=1;j<=k;j++)cin>>ec[i][j];memset(mp,127/3,sizeof(mp));for(int i=1;i<=n;i++)dis[i]=999999;for(int i=1;i<=m;i++){int x,y,v;cin>>x>>y>>v;mp[x][y]=mp[y][x]=v;}dis[bg]=0;search(bg);if(dis[ed]!=999999)cout<<dis[ed];else cout<<-1;return 0; }

?

轉載于:https://www.cnblogs.com/hyfer/p/5852522.html

總結

以上是生活随笔為你收集整理的NOIP2012 文化之旅的全部內容,希望文章能夠幫你解決所遇到的問題。

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