有一位使者要遊歷各國,他每到乙個國家,都能學到一種文化,但他不願意學習任何一種文化超過一次(即如果他學習了某種文化,則他就不能到達其他有這種文化的國家)。不同的國家可能有相同的文化。不同文化的國家對其他文化的看法不同,有些文化會排斥外來文化(即如果他學習了某種文化,則他不能到達排斥這種文化的其他國家)。
現給定各個國家間的地理關係,各個國家的文化,每種文化對其他文化的看法,以及這位使者遊歷的起點和終點(在起點和終點也會學習當地的文化),國家間的道路距離,試求從起點到終點最少需走多少路。
輸入格式
第一行為五個整數n,k
,m,s
,t
n,k,m,s,t
n,k,m,
s,t,每兩個整數之間用乙個空格隔開,依次代表國家個數(國家編號為1到n
nn),文化種數(文化編號為1
11到k
kk),道路的條數,以及起點和終點的編號(保證 s≠t
s \neq t
s̸=t);
第二行為n
nn個整數,每兩個整數之間用乙個空格隔開,其中第i
ii個數c
ic_i
ci,表示國家i
ii的文化為c
ic_i
ci。
接下來的k
kk行,每行k
kk個整數,每兩個整數之間用乙個空格隔開,記第i
ii行的第j
jj個數為 aij
a_ai
j,a ij
=1
a_ =1
aij=1
表示文化 i 排斥外來文化j
jj(i=j
i = j
i=j時表示排斥相同文化的外來人),aij
=0
a_=0
aij=0
表示不排斥(注意i
ii排斥j
jj 並不保證j
jj一定也排斥i
ii)。
接下來的m
mm行,每行三個整數u,v
,d
,u,v,d,
u,v,d,
每兩個整數之間用乙個空格隔開,表示國家u
uu與國家v
vv有一條距離為d
dd的可雙向通行的道路(保證u
uu不等於v
vv,兩個國家之間可能有多條道路)。
輸出格式
輸出只有一行,乙個整數,表示使者從起點國家到達終點國家最少需要走的距離數(如果無解則輸出-1)。
輸入樣例#1
2 2 1 1 2輸出樣例#11 20 1
1 01 2 10
-1輸入樣例#2
2 2 1 1 2輸出樣例#2 輸入輸出樣例#1:1 20 1
0 01 2 10
由於到國家 2 必須要經過國家 1,而國家 2 的文明卻排斥國家 1 的文明,所以不可能到達國家 2。
輸入輸出樣例#2:
路線為1->2。
對於 100%的資料,有$2≤n≤100,1≤k≤100,1≤m≤n^2 $
1 ≤k
i≤k,
1≤u,
v≤n,
1≤d≤
1000,s
≠t,1
≤s,t
≤n
1≤k_i≤k ,1≤u,v≤n,1≤d≤1000,s≠t,1≤s,t≤n
1≤ki≤
k,1≤
u,v≤
n,1≤
d≤10
00,s
̸=t
,1≤s
,t≤n
這道題讓我們求s
ss到t
tt的最短路,自然地想到用最短路徑演算法。可這裡的限制條件太多,怎麼下手?別急,慢慢來。
首先,由於資料範圍較小,可以用floyd,也可用spfa。對於學到的文化,這裡用乙個map從int到bool的對映儲存。其實相當於可以作為資料型別的陣列。每學到乙個新文化,就將map
[i]=
1map[i]=1
map[i]
=1,其中i
ii是學到的文化,並將其作為引數,放在佇列裡。
其次,對於特殊情況的處理以及重邊的處理。即c[s
]=c[
t]
c[s]=c[t]
c[s]=c
[t]時,要進行特判,直接輸出−1-1
−1。雖然還有一種更簡單的求最短路的方法,但這樣可以對付加強資料。
另外,此題還可用dfs做,這裡就不貼**了。
#include
#include
#include
#include
#include
#include
#define ll long long
#define mp make_pair
#define inf 0x7fffffff/2
using
namespace std;
int n,k,m,s,t;
int c[
1005
],a[
105]
[105];
int g[
105]
[105];
int now[
105]
;int d[
105]
,vis[
105]
;queueint,map<
int,
bool
>
>
> q;
pair<
int,map<
int,
bool
>
> temp;
void
spfa
(int v0)}if
(flag)
continue;if
(d[i]
>d[w]
+g[w]
[i])}}
}}intmain()
if(c[s]
==c[t]
)spfa
(s);
if(d[t]
==inf)
printf
("-1");
else
printf
("%d"
,d[t]);
return0;
}
NOIP2012 文化之旅
題解 求最短路問題,想著用floyd或dijkstra解決,最後用了floyd,在輸入的時候 對文化排斥和文化相同的提前進行處理,若不滿足題目條件的路我們直接把它 斷掉,也就是說在進行floyd主演算法之前我們的圖就已經是滿足題目條件的 這時只需要用floyd模板套用就行了,也不用新增額外語句 當然...
NOIP2012 JuniorT4 文化之旅
題目描述 有一位使者要遊歷各國,他每到乙個國家,都能學到一種文化,但他不願意學習任何一 種文化超過一次 即如果他學習了某種文化,則他就不能到達其他有這種文化的國家 不 同的國家可能有相同的文化。不同文化的國家對其他文化的看法不同,有些文化會排斥外來 文化 即如果他學習了某種文化,則他不能到達排斥這種...
文化之旅(NOIP2012普及組第四題)
有一位使者要遊歷各國,他每到乙個國家,都能學到一種文化,但他不願意學習任何一種文化超過一次,即如果他學習了某種文化,則他就不能到達其他有這種文化的國家。不同的國家可能有相同的文化。不同文化的國家對其他文化的看法不同,有些文化會排斥外來文化,即如果他學習了某種文化,則他不能到達排斥這種文化的其他國家。...