藍橋杯 卡勒沃夫之弱水路三千(提高型) 拓撲排序+Map
藍橋杯歷年真題題目及題解目錄彙總
題目描述
錦瑟年華誰與度 莫問情歸處 隻影向斜陽 劍吼西風 欲把春留駐
天涯芳草無歸路 回首花無數 解語自銷魂 弱袂縈春 塵緣不相誤
......
在卡勒沃夫充滿文學殺傷力的聲音中,身處紫荊2號樓202B的四位遠近高低各不同的室友紛紛回憶起了各自波瀾起伏的過去,並對長在百草園,鄰有百花谷的現狀表達了各自的見解。
某Q:" ...我小學就開竅了...她的父母說我很好,但是...今天又和北林的聯絡了..."
某X:" ...差點就成了,結果到學校了...這個方法放假了我去對我的同桌用!..."
某W:" ..." (千言萬語不言中,有大量的故事等待考古)
某Z:" ...為了來清華...我們們審美觀不一樣,不會搶..."
......
卡勒沃夫在這個不朽的夜話中搜集出了某人零散的歷任女友資料,為了強迫某人將他出的題目的標程交出,現在卡勒沃夫需要一個能將這些零散資訊整合起來的 程式。伴隨著雄壯委婉動人的音樂,身為程式設計快男(超女)的你降臨了!卡勒沃夫正對著您做Orz狀並請求著:" 神牛啊~請施捨給我一段程式把~偶米頭 發~" 。。
輸入
第一行為一個不超過5的整數T,表示資料的組數。之後每組資料的一行為一個不超過100的整數n。之後n行每行有兩個用單個空格隔開的字串(每個字串只有英文大小寫字母,長度不超過10),為兩位mm的名字。每行第一個mm先於第二個mm成為某人的女友。
在這裡我們假裝詛咒某人不會同時被兩個或兩個以上mm泡,某個mm拋棄了某人後不會再吃回頭草,同時卡勒沃夫深邃的洞察力使得他收集到了充足的資訊以確定某人女友的先後順序。
在小資料組中出現的人物不超過13個
輸出
輸出T行,每行對應一組資料,並按照mm們從先到後成為某人女友的順序輸出她們的名字,各個名字間用一個空格隔開。
樣例輸入
2
2
RY Unknown
YSZ RY
3
tomorrow yestoday
tomorrow today
today yestoday
樣例輸出
YSZ RY Unknown
tomorrow today yestoday
這題要用到Map來處理字串和下標的問題,一遍這樣給出的話,資料規模不會很大,考你怎麼處理資料把,另外鄰接表存圖,佇列輸出,還有這題還說人物不超過13,結果給的資料是100= =,所以還是要開大點~
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class 藍橋杯_卡勒沃夫之弱水路三千_提高型 {
static HashMap<String,Integer> map = new HashMap<>();
static ArrayList<Integer> list = new ArrayList<>();
static ArrayList<Integer>[] edge = new ArrayList[105];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
while(T-->0) {
map.clear();
list.clear();
int n=0;
int m = in.nextInt();
int[] w = new int[105];
for(int i=0;i<105;i++)
edge[i] = new ArrayList<>();
while(m-->0) {
String s1 = in.next();
String s2 = in.next();
if(!map.containsKey(s1))
map.put(s1,n++);
if(!map.containsKey(s2))
map.put(s2,n++);
w[map.get(s2)]++;
edge[map.get(s1)].add(map.get(s2));
}
Queue<Integer> q = new LinkedList<>();
for(int i:map.values())
if(w[i]==0)
q.add(i);
while(!q.isEmpty()) {
int u = q.poll();
list.add(u);
for(int v:edge[u]) {
w[v]--;
if(w[v]==0)
q.add(v);
}
}
if(list.size()==n) {
for(int i=0;i<n;i++) {
String x = "";
for(String s:map.keySet())
if(list.get(i)==map.get(s)) {
x = s;
break;
}
if(i==n-1)
System.out.println(x);
else
System.out.print(x+" ");
}
}
else
System.out.println("NO");
}
}
}
相關文章
- 藍橋杯 排序排序
- 拓撲排序排序
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- 藍橋杯 演算法提高 字串壓縮演算法字串
- 拓撲排序,YYDS排序
- 拓撲排序模板排序
- [藍橋杯][演算法提高VIP]尤拉函式演算法函式
- [藍橋杯][演算法提高VIP]超級瑪麗演算法
- [藍橋杯][演算法提高VIP]大數加法演算法
- 拓撲排序小結排序
- 圖論——拓撲排序圖論排序
- 筆記:拓撲排序筆記排序
- [藍橋杯][演算法提高VIP]奪寶奇兵 dp演算法
- 藍橋杯-N皇后
- 藍橋杯真題
- 藍橋杯之特殊迴文數JAVAJava
- 藍橋杯嵌入式之點燈
- Reward (圖論+拓撲排序)圖論排序
- 拓撲排序 - Topological Sort排序
- 拓撲排序核心程式碼排序
- HDU 4857 逃生(拓撲排序)排序
- 【筆記/模板】拓撲排序筆記排序
- AOV網與拓撲排序排序
- DFS實現拓撲排序排序
- 藍橋杯 -- 演算法提高 身份證號碼升級演算法
- [藍橋杯][演算法提高VIP]分蘋果 線段樹演算法蘋果
- 藍橋杯 演算法提高 拿糖果(完全揹包dp)演算法
- 藍橋杯年號字串字串
- 藍橋杯-帶分數
- 藍橋杯-翻硬幣
- 藍橋杯-螞蟻感冒
- 藍橋杯 計算方程
- 藍橋杯-座次問題
- 藍橋杯-長草(BFS)
- 藍橋杯-日期問題
- 藍橋杯-班級活動
- Java實現 藍橋杯 演算法提高 八數碼(BFS)Java演算法
- 拓撲排序就這麼回事排序