java人,3个tle,2个mle,求助
查看原帖
java人,3个tle,2个mle,求助
545226
leiPengJie楼主2021/8/16 16:45

RT

import java.util.*;

public class Main {
	public static class Node
	{
		public int index;
		public ArrayList<Node> in=new ArrayList<Node>();
		public ArrayList<Node> out=new ArrayList<Node>();
		public Node(int index)
		{
			this.index=index;
		}//index是这个node对象的编号
		public void connect(Node east)
		{
			east.in.add(this);
			out.add(east);
		}//连接两个节点,从this指向east
		public void disconnect(Node east)
		{
			east.in.remove(this);
			out.remove(east);
		}//断连
		public void search(int a[],int b[])
		{
			b[0]++;//b是当前路径长,a是最长路径长,进来先b++
			if(in.isEmpty())
			{
				if(b[0]>a[0])
				{
					a[0]=b[0];
				}
			}//入度为0时打擂台
			else
			{
				for(Node node:in)
				{
					node.search(a, b);
				}//入度不为0,“反向”深搜
			}
			b[0]--;//出去b--
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		Node nodes[]=new Node[in.nextInt()];//建立N长度数组
		int M=in.nextInt();//读入M
		for(int i=0;i<nodes.length;i++)
		{
			nodes[i]=new Node(i);
		}//初始化,填充nodes[]
		for(int i=0;i<M;i++)
		{
			int x=in.nextInt();
			int y=in.nextInt();
			nodes[x-1].connect(nodes[y-1]);
		}//依次读入节点间关系,连接
		for(int i=0;i<nodes.length;i++)
		{
			int a[]= {0};
			nodes[i].search(a, new int[1]);
			System.out.println(a[0]);
		}//深搜并输出
	}

}

2021/8/16 16:45
加载中...