poj 2186 Popular Cows
2015-09-13 13:42
477 查看
不会做。。然后写了个爆搜因为有人说能过。。
把边反向,就意味着所有人都赞我。结果跑了7000多MS过的,蛋疼
正确做法是强联通,无奈我不会。看看再写过吧
把边反向,就意味着所有人都赞我。结果跑了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(); } }
相关文章推荐
- OpenCV——高斯模糊与毛玻璃特效
- web hosting上opencart发送邮件问题解决方法
- Dop中的sop solver
- 从RealSense中提取完整的深度和彩色图像,并存在opencv中的Mat里
- Linux内核编程的特点
- Nginx学习笔记一_UNIX中的IO模型
- Unbuntu12.04 x64 安装jdk-7u45-linux-x64.tar.gz
- 反向代理是什么,有什么特点
- Linux之fork函数
- [原创]opencv图像亮度/对比度调整实验
- linux free命令用法以及解释
- CentOS7中文输入法,拼音输入法
- Shell: nohup守护进程化
- Nginx Location配置总结
- bash shell数组
- 虚拟机安装 centos7 注意事项
- 用花生壳怎样发布网站
- PX4源码开发人员文档(一)——软件架构
- linux shell — 1.命令的执行方式、man page 和关机
- linux软RAID