時間限制:10000ms
單點時限:1000ms
內存限制:256MB
描述
小Hi和小Ho最近在玩一個解密類的遊戲,他們需要控制角色在一片原始叢林裏面探險,收集道具,並找到最後的寶藏。現在他們控制的角色來到了一個很大的湖邊。湖上有N個小島(編號1..N),以及連接小島的M座木橋。每座木橋上各有一個寶箱,裏面似乎裝着什麼道具。
湖邊還有一個船伕,船伕告訴主角。他可以載着主角到任意一個島上,並且可以從任意一個島上再載着主角回到湖邊,但是主角只有一次來回的機會。同時船伕告訴主角,連接島嶼之間的木橋很脆弱,走過一次之後就會斷掉。
因爲不知道寶箱內有什麼道具,小Hi和小Ho覺得如果能把所有的道具收集齊肯定是最好的,那麼對於當前島嶼和木橋的情況,能否將所有道具收集齊呢?
舉個例子,比如一個由6個小島和8座橋組成的地圖:
主角可以先到達4號小島,然後按照4->1->2->4->5->6->3->2->5的順序到達5號小島,然後船伕到5號小島將主角接回湖邊。這樣主角就將所有橋上的道具都收集齊了。
輸入
第1行:2個正整數,N,M。分別表示島嶼數量和木橋數量。1≤N≤10,000,1≤M≤50,000
第2..M+1行:每行2個整數,u,v。表示有一座木橋連接着編號爲u和編號爲v的島嶼,兩個島之間可能有多座橋。1≤u,v≤N
輸出
第1行:1個字符串,如果能收集齊所有的道具輸出“Full”,否則輸出”Part”。
6 8 1 2 1 4 2 4 2 5 2 3 3 6 4 5 5 6樣例輸出
Full
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public boolean isEuler(HashMap<Integer,ArrayList<Integer>> map,int num){
int count=0;
for(Integer key:map.keySet()){
ArrayList<Integer> list=map.get(key);
if(list.size()%2==1) count++;
}
if(count!=2&&count!=0) return false;
return isConnection(map, num);
}
public boolean isConnection(HashMap<Integer,ArrayList<Integer>> graph,int num){
if(graph.size()==0) return true;
int i=1;
for(;i<=num;i++){
if(graph.containsKey(i)) break;
}
HashSet<Integer> set=new HashSet<Integer>();
Queue<Integer> queue=new LinkedList<Integer>();
set.add(i); queue.add(i);
while(!queue.isEmpty()){
Integer a=queue.poll();
set.add(a);
ArrayList<Integer> list=graph.get(a);
if(list==null) continue;
for(Integer aa:list){
if(set.contains(aa)) continue;
queue.add(aa);
}
}
return set.size()==num;
}
public static void main(String[] args) {
Main main=new Main();
Scanner scan=new Scanner(System.in);
HashMap<Integer,ArrayList<Integer>> map=new HashMap<Integer,ArrayList<Integer>>();
int vertexs=scan.nextInt();
int num=scan.nextInt();
for(int i=0;i<num;i++){
int a=scan.nextInt();
int b=scan.nextInt();
if(!map.containsKey(a)) map.put(a, new ArrayList<Integer>());
map.get(a).add(b);
if(!map.containsKey(b)) map.put(b, new ArrayList<Integer>());
map.get(b).add(a);
}
System.out.println(main.isEuler(map,vertexs)?"Full":"Part");
}
}