| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
奇怪了,为什么老是超时?高手帮看看!带权,用了路径压缩,还是超时import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int d, x, y;
int result = 0;
Food1182[] foods = new Food1182[n+1];
for(int i=0; i<n+1; i++) {
foods[i] = new Food1182();
}
Food1182 xAncester, yAncester;
Food1182 ancester, enemy, food;
for(int i=0; i<k; i++) {
d = scanner.nextInt();
x = scanner.nextInt();
y = scanner.nextInt();
if(x>n || y>n || (d==2 && x==y)) {
result++;
// System.out.println((i+1) + "\t" + d + "\t" + x + "\t" + y);
continue;
}
xAncester = foods[x].getAncester();
yAncester = foods[y].getAncester();
if(d == 1) { // same ancester
if(xAncester == yAncester) {
;
} else if(xAncester.enemy == yAncester || xAncester.food == yAncester) {
result++;
// System.out.println((i+1) + "\t" + d + "\t" + x + "\t" + y);
} else { // 不同生态圈,合并
ancester = combine(xAncester, yAncester);
enemy = combine(xAncester.enemy, yAncester.enemy);
food = combine(xAncester.food, yAncester.food);
chain(ancester, enemy, food);
}
} else { // eat
if(xAncester.food == yAncester) {
;
} else if(xAncester.enemy == yAncester || xAncester == yAncester) {
result++;
// System.out.println((i+1) + "\t" + d + "\t" + x + "\t" + y);
} else {
ancester = combine(xAncester, yAncester.enemy);
enemy = combine(xAncester.enemy, yAncester.food);
food = combine(xAncester.food, yAncester);
chain(ancester, enemy, food);
}
}
// draw(i+1, foods, n);
}
System.out.println(result);
scanner.close();
}
public static void chain(Food1182 ancester, Food1182 enemy, Food1182 food) {
ancester.enemy = enemy;
ancester.food = food;
if(enemy != null) {
enemy.enemy = food;
enemy.food = ancester;
}
if(food != null) {
food.enemy = ancester;
food.food = enemy;
}
}
public static Food1182 combine(Food1182 food1, Food1182 food2) {
if(food1 == null) {
return food2;
}
if(food2 == null) {
return food1;
}
if(food1.weight < food2.weight) {
food1.ancester = food2;
food2.weight += food1.weight;
return food2;
} else {
food2.ancester = food1;
food1.weight += food2.weight;
return food1;
}
}
}
class Food1182 {
public int weight;
public Food1182 ancester;
public Food1182 enemy;
public Food1182 food;
public Food1182() {
ancester = this;
enemy = null;
food = null;
}
public Food1182 getAncester() {
Food1182 ancester = this;
while(ancester != ancester.ancester) {
ancester.ancester = ancester.ancester.ancester;
ancester = ancester.ancester;
}
return ancester;
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator