您的位置:首页 > 运维架构

poj 2186 Popular Cows

2015-09-13 13:42 477 查看
不会做。。然后写了个爆搜因为有人说能过。。

把边反向,就意味着所有人都赞我。结果跑了7000多MS过的,蛋疼

正确做法是强联通,无奈我不会。看看再写过吧

import java.util.*;
import java.io.*;
import java.math.BigInteger;

class edge{
int from,to,next;
public edge(int a, int b, int c){
from=a;to=b;next=c;
}
}
class problem11{
int n,m;
int header[];
edge edges[];
int counter = 0;
boolean vis[];
void solver() throws IOException{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(reader.readLine());
n = Integer.valueOf(st.nextToken());
m = Integer.valueOf(st.nextToken());
header = new int[n+1];
Arrays.fill(header, -1);
edges = new edge[m];
vis = new boolean[n+1];
for(int i=0;i<m;i++){
st = new StringTokenizer(reader.readLine());
int f = Integer.valueOf(st.nextToken());
int t = Integer.valueOf(st.nextToken());
edges[i] = new edge(t,f,header[t]);
header[t] = counter++;
}
int total = 0;
for(int i=1;i<=n;i++){
Arrays.fill(vis, false);
vis[i] = true;
int tmp = dfs(i);
if(tmp==n) total++;
}
System.out.println(total);
}
int dfs(int cur){
int s = 1;
for(int i=header[cur];i!=-1;i=edges[i].next){
edge t = edges[i];
if(!vis[t.to]){
vis[t.to] = true;
s+=dfs(t.to);
}
}
return s;
}
}
public class fence8{
public static void main (String [] args) throws Exception {
problem11 p = new problem11();
p.solver();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: