CCF 认证4
题意:求强联通分量
Tarjan算法
- #include<iostream>
- #include<stdio.h>
- #include<stdlib.h>
- #include<memory.h>
- #include<string.h>
- #include<algorithm>
- #include<cmath>
- #include<map>
- #define clc(a,b) memset(a,b,sizeof(a))
- typedef long double ld;
- typedef long long ll;
- const int N = ;
- const double eps=1e-;
- const int inf=-;
- const int maxn=1e5+;
- const int num=;
- const double Pi=acos(-);
- using namespace std;
- struct gragh
- {
- int to;
- int next;
- } V[num];
- bool instack[num]= {false};
- int low[num]= {},DFN[num]= {},Stap[num]= {},Belong[num]= {};
- int answer=;
- int Dindex,stop,Bcnt;
- int head[num];
- int edge;
- void add(int a,int b)
- {
- V[edge].to=b;
- V[edge].next=head[a];
- head[a]=edge++;
- }
- void tarjan(int u)
- {
- int v;
- DFN[u]=low[u]=++Dindex;
- instack[u]=true;
- Stap[stop++]=u;
- for(int i=head[u]; i!=-; i=V[i].next)
- {
- v=V[i].to;
- if(!DFN[v])
- {
- tarjan(v);
- if(low[v]<low[u])
- low[u]=low[v];
- }
- else if(instack[v]&&DFN[v]<low[u])
- low[u]=DFN[v];
- }
- if(DFN[u]==low[u])
- {
- int sum=;
- Bcnt++;
- do
- {
- v=Stap[--stop];
- instack[v]=false;
- Belong[v]=Bcnt;
- sum++;
- }
- while(v!=u);
- cout<<sum<<endl;
- if(sum!=)
- answer+=(sum*(sum-))/;
- }
- }
- void solve(int N)
- {
- stop=Bcnt=Dindex=;
- // clc(DFN,0);
- for(int i=; i<=N; i++)
- if(!DFN[i])
- tarjan(i);
- }
- int main()
- {
- int n,m;
- int a,b;
- cin>>n>>m;
- clc(head,-);
- edge=;
- for(int i=; i<m; i++)
- {
- cin>>a>>b;
- add(a,b);
- }
- solve(n);
- cout<<answer<<endl;
- return ;
- }
CCF 认证4的更多相关文章
- CCF认证历年试题
CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...
- 小明种苹果(续)第十七次CCF认证
小明种苹果(续)第十七次CCF认证 题目 原题链接 ](http://118.190.20.162/view.page?gpid=T93) 很高心,在现在CCF CSP可以下载自己当时的答卷了,也就是 ...
- CCF认证(1)
#include <iostream> #include <windows.h> using namespace std; typedef struct letter{ int ...
- CCF 认证
题意:字符串替换 string+map的应用 #include<iostream> #include<stdio.h> #include<stdlib.h> #in ...
- CCF认证考试——折点计数
描述:简单题 #include<iostream> using namespace std; int main() { ], n, count = ; cin >> n; ; ...
- CCF认证之——相反数
这道题目非常简单! #include<iostream> using namespace std; int main() { ],n,count=; cin >> n; ; i ...
- ccf认证 201709-4 通信网络 java实现
试题编号: 201709-4 试题名称: 通信网络 时间限制: 1.0s 内 ...
- ccf认证模拟题之三---最大的矩形
问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi.这n个矩形构成了一个直方图.例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3 ...
- CCF认证201712-2游戏
问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向. 游戏开始,从1号小朋 ...
随机推荐
- 【数位DP】Hdu 2089:不要62
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- zoj 3365
题意 给你一个序列 改变尽可能少的数使其成为公差为一 递增的等差数列 可以将给你的序列减去一个等差数列 即num[i] -= i,若得到的数全部相等, 则说明给你的序列本身就满足条件 则只要寻求n ...
- firefly的环境搭建(2013年9月25日最新,win下最详图文)
源地址:http://www.9miao.com/question-15-53785.html 一.安装PythonFirefly是采用Python编写的高性能.分布式游戏服务器框架,所以使用Fire ...
- 【BZOJ 2829】 2829: 信用卡凸包 (凸包)
2829: 信用卡凸包 Description Input Output Sample Input 2 6.0 2.0 0.0 0.0 0.0 0.0 2.0 -2.0 1.5707963268 Sa ...
- 基于http.sys来开发的,真的是非常稳定
真正的WEB服务器是不会用Indy写的.因为它是基于每连接每线程的. 其实真正的服务器需要下很多功夫,无法快速开发的.比如说,字符串处理.玩服务器基本上就是玩内存.举个例子: var str:Ansi ...
- 转:JavaScript中函数与对象的关系
来自:http://www.nowamagic.net/javascript/js_RelationOfFunctionAndObject.php 在ajax兴起以前,很多人写JavaScript可以 ...
- nyist 737 相邻石子合并问题
http://acm.nyist.net/JudgeOnline/problem.php?pid=737 动态规划状态方程: dp[i][j]=d[i][k]+dp[k+1][j]+(sum[k]-s ...
- Android开发UI之手动显示和隐藏软键盘
1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) InputMethodManager imm = (InputMethodManager) getSystemService(Contex ...
- poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)
题目:http://poj.org/problem?id=2513 参考博客:http://blog.csdn.net/lyy289065406/article/details/6647445 htt ...
- x86、i386、i486、i586、i686和x86_64
1.386与686 i386—几乎所有的X86平台,不论是旧的pentum或者是新的pentum-IV与K7系统CPU,都可以正常工作,i指得是Intel兼容的CPU,至于386就是CPU的等级.i5 ...