題目描述 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。
加上關於「即如果他學習了某種文化,則他就不能到達其他有這種文化的國家」會wa,,為什麼……
不加就a
而且因為陣列開小調了半個上午……
變數跟變數不能重名!!
嗯 以下是spfa:
#include
#include
#include
#include
using
namespace
std;
int first[10000+1],nxt[10000+1],tot;
int c[1000+1],dist[10000+1];
bool a[1005][1005],used[10000+1];
int n,m,k,s,tt;
struct edge
l[10005
<<1];
void build(int f,int t,int v)
; nxt[tot]=first[f];
first[f]=tot;
return;
}void spfa(int s)}}
}}int main()
spfa(s);
if(dist[tt]<0x3f3f3f3f) cout
<'\n';
else
puts("-1\n");
return
0;}
試試dfs?
好 不會。
#include
#include
#include
#include
using
namespace
std;
int first[10000+1],nxt[10000+1],tot;
int c[1000+1],dist[10000+1];
bool a[1005][1005],used[10000+1],vis[10000+1],flag;
int n,m,k,s,tt;
struct edge
l[10005
<<1];
void build(int f,int t,int v)
; nxt[tot]=first[f];
first[f]=tot;
return;
}bool can(int x)
return1;}
void dfs(int s)
}
}int main()
dist[s]=0;
dfs(s);
if(dist[tt]<0x3f3f3f3f) cout
<'\n';
else
puts("-1\n");
return
0;}
簡直就是爆搜 NOIP2012 文化之旅
題解 求最短路問題,想著用floyd或dijkstra解決,最後用了floyd,在輸入的時候 對文化排斥和文化相同的提前進行處理,若不滿足題目條件的路我們直接把它 斷掉,也就是說在進行floyd主演算法之前我們的圖就已經是滿足題目條件的 這時只需要用floyd模板套用就行了,也不用新增額外語句 當然...
luogu1078 文化之旅
題目描述 有一位使者要遊歷各國,他每到乙個國家,都能學到一種文化,但他不願意學習任何一種文化超過一次 即如果他學習了某種文化,則他就不能到達其他有這種文化的國家 不同的國家可能有相同的文化。不同文化的國家對其他文化的看法不同,有些文化會排斥外來 文化 即如果他學習了某種文化,則他不能到達排斥這種文化...
Luogu P1078 文化之旅
有一位使者要遊歷各國,他每到乙個國家,都能學到一種文化,但他不願意學習任何一種文化超過一次 即如果他學習了某種文化,則他就不能到達其他有這種文化的國家 不同的國家可能有相同的文化。不同文化的國家對其他文化的看法不同,有些文化會排斥外來文化 即如果他學習了某種文化,則他不能到達排斥這種文化的其他國家 ...