HDU2647,Reward错误未解决

来源:互联网 发布:战舰少女r淘宝店 编辑:程序博客网 时间:2024/06/03 23:03

找错误找的都吐了,想到的测试数据都过了


import java.util.ArrayDeque;import java.util.Arrays;import java.util.Queue;import java.util.Scanner;public class P1002 {public static Worker[] w;public static int[] d;public static void main(String[] args) {Scanner cin = new Scanner(System.in);while (cin.hasNext()) {int n = cin.nextInt();int m = cin.nextInt();w = new Worker[n + 5];for (int i = 0; i < w.length; i++) {w[i] = new Worker(i);}d = new int[n + 5];Arrays.fill(d, 0);for (int i = 1; i <= m; i++) {//a比b多int a = cin.nextInt();int b = cin.nextInt();Worker te = findLast(w[b]);//找到b的链上最后一个next值为空的节点te.next = new Worker(a);//把a连接到b上d[a]++;//a的入度加一}ArrayDeque<Integer> qu = new ArrayDeque<Integer>();int wonum = 0;for (int i = 1; i <= n; i++) {if (d[i] == 0) {qu.add(i);wonum++;}}//long reward = 100;long reward = 888;long[] ans = new long[10010];// /////Arrays.fill(ans, 0);while (!qu.isEmpty()) {int size = qu.size();for (int i = 1; i <= size; i++) {int tou = qu.pop();// sum += reward;if (reward > ans[tou])ans[tou] = reward;if (w[tou].next != null) {decD(w[tou].next);Worker te = w[tou];while (te.next != null) {te = te.next;if (d[te.num] == 0) {qu.add(te.num);wonum++;}}}}reward++;}if (wonum != n)System.out.println(-1);//System.out.println("Poor Xed");else {long sum = 0;for (int i = 1; i <= n; i++) {sum += ans[i];}System.out.println(sum);}}}static Worker findLast(Worker a) {if (a.next != null)return findLast(a.next);elsereturn a;}static void decD(Worker a) {d[a.num]--;if (a.next != null) {decD(a.next);}}}class Worker {int num;Worker(int num) {this.num = num;this.next = null;}Worker next;}


0 0
原创粉丝点击