BZOJ2438 杀人游戏
2015-10-26 20:05
323 查看
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2438
分析:只能说wori…整一页都是WA
代码:
分析:只能说wori…整一页都是WA
代码:
#include <cstdio> #include <algorithm> #include <cstring> #include <stack> #include <vector> #include <map> using namespace std; const int Tmax=100005; int n,m,last,cnt,dfn[Tmax],low[Tmax],belong[Tmax],com[Tmax],ans,num[Tmax]; bool in[Tmax]; vector<int> G[Tmax],GG[Tmax]; stack<int> ST; void tarjan(int x) { int i,len=G[x].size(),to; dfn[x]=low[x]=++last; ST.push(x); in[x]=true; for(i=0;i<len;i++) { to=G[x][i]; if(dfn[to]==0) { tarjan(to); low[x]=min(low[x],low[to]); } else if(in[to]) low[x]=min(low[x],dfn[to]); } if(dfn[x]==low[x]) { cnt++; do{ to=ST.top(); ST.pop(); in[to]=false; belong[to]=cnt; num[cnt]++; }while(to!=x); } return; } void init() { int i,len,j; for(i=1;i<=n;i++) { len=G[i].size(); for(j=0;j<len;j++) if(belong[i]!=belong[G[i][j]]) { GG[belong[i]].push_back(belong[G[i][j]]); com[belong[G[i][j]]]++; } } return; } void work() { int i,j,len; bool ok; for(i=1;i<=cnt;i++) if(com[i]==0) ans++; for(i=1;i<=cnt;i++) { ok=true; if(com[i]!=0||num[i]!=1) continue; len=GG[i].size(); for(j=0;j<len;j++) if(com[GG[i][j]]==1) ok=false; if(ok){ ans--; return; } } return; } int main() { int i,u,v; scanf("%d%d",&n,&m); for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); G[u].push_back(v); } for(i=1;i<=n;i++) if(dfn[i]==0) tarjan(i); init(); work(); printf("%.6lf",(1.0*(n-ans))/(1.0*n)); return 0; }
相关文章推荐
- 音乐播放器和视频播放器的使用
- linux 批量重命名文件
- linux下编译bib、tex生成pdf文件
- java21
- java20
- iOS RTMP 视频直播开发笔记(3)- 了解 H.264 编码
- Linux 函数库设计
- ACM2001Java实现两个点之间的距离
- js拼接字符串传值,子窗口传值
- iOS RTMP 视频直播开发笔记(2) – 了解 MP4 文件格式
- Java Swing 之Timer配合JProgressBar的使用
- android开机启动无界面后台程序
- django 微信企业号 返回text消息
- 如何在运行时更改虚拟机配置
- Java Swing 之Timer配合JProgressBar的使用
- jsonString 转字典
- 小随记
- django 微信企业号 返回text消息
- Light OJ 1033 - Generating Palindromes(区间DP)
- php form表单get传值