我正在尝试解决有关Hackerearth的问题。比赛已经结束很久了。
http://www.hackerearth.com/lenskart-hiring-challenge/algorithm/big-p-and-punishment-5/description/
问题陈述
Big P已成为哈克国际学校的体育教师。
今天,第十二班的学生一直非常没有纪律,他决定全部惩罚他们。
他让所有N学生(编号为1到N)站成一条线,要求他们坐下来。
学生知道Big P是一个非常残忍和虐待狂的人,当他们看到朋友坐下时,学生们开始坐下来。
然而,总有一些学生不遵循这一趋势。现在当Big P看到这种情况发生时,他打了那个学生并让他坐下来。遵循上述相同的过程,当任何一个学生拒绝自己坐下时,他们就会停止。
鉴于学生们让Big P坐下来让他们坐下来,你需要告诉他们没有。那些坐在那条线上的学生。
注意:如果A是B的朋友,那么B也不是A的朋友。
输入格式: 第一行包含一个整数T,表示没有测试用例。每个测试用例以包含三个整数N,F,S的行开头,其中N是该行中学生的数量。接下来的F行有两个整数A和B表示学生A和B之间的友谊。接下来S行有一个整数X表示被Big P打耳的学生。
输出格式: 对于每个测试用例,输出一行包含一个整数,即在该行中坐下的学生总数。
[T <= 10,N,F,S <= 10000]
示例输入
1
3 2 1
1 2
2 3
2
示例输出
2
我为此编写了一个Java代码。
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Arrays;
@SuppressWarnings("unchecked")
class Graph
{
static int visited[];
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testcases;
int N,F,S,n;
int a,b;
testcases=Integer.parseInt(br.readLine());
while(--testcases>=0)
{
String[] s = br.readLine().split(" ");
N=Integer.parseInt(s[0]);
F=n=Integer.parseInt(s[1]);
S=Integer.parseInt(s[2]);
visited=new int[N+1];
Arrays.fill(visited,0);
ArrayList[] adj=new ArrayList[N+1];
while(--n>=0)
{
s = br.readLine().split(" ");
a=Integer.parseInt(s[0]);
b=Integer.parseInt(s[1]);
if(adj[a]==null){
adj[a]=new ArrayList<Integer>();
}
(adj[a]).add(b);
}
int root;
for(int i=1;i<=S;i++)
{
root=Integer.parseInt(br.readLine());
dfs(adj,root);
}
int ans=0;
for(int i=1;i<=N;i++)
{
if(visited[i]==1){
++ans;
}
}
System.out.println(ans);
}
}
static void dfs(ArrayList adj[],int r)
{
int curr;
if(visited[r]!=1)
{
ArrayList base=adj[r];
if(base!=null)
{
Iterator itr=base.iterator();
while(itr.hasNext())
{
curr=(int)itr.next();
if(visited[curr]==0)
{
dfs(adj,curr);
}
}
}
visited[r]=1;
//System.out.println(r);
}
}
}
它传递给第一个测试用例,但是对剩下的测试用例给出了NZEC错误。
我尝试过更改:
这些都没有帮助。
请帮我识别故障。