记录编号 |
262567 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[金陵中学2007] 传话 |
最终得分 |
100 |
用户昵称 |
SOBER GOOD BOY |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2016-05-21 09:11:00 |
内存使用 |
0.00 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#include<algorithm>
#define Mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int maxn=1010;
int n,m,len,Tim,cnt;
stack<int> q;
struct node
{
int to,next;
}e[100*maxn];
bool flag[maxn];
void Insert(int,int);
void Dfs(int );
bool fe[maxn];
int Low[maxn],head[maxn],dfn[maxn],a[maxn]={0},ru[maxn],w[maxn],chu[maxn],Belong[maxn];
int ma()
{
freopen("messagez.in","r",stdin);
freopen("messagez.out","w",stdout);
scanf("%d%d",&n,&m);
memset(head,-1,sizeof(head));
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
Insert(x,y);
}
for(int i=1;i<=n;i++)
{
if(dfn[i]==0)
{
Dfs(i);
}
}
/*for(int i=1;i<=n;i++)
{
int tot=0;
for(int j=head[i];j!=-1;j=e[j].next)
{
int h=e[j].to;
if(Belong[h]!=Belong[i])
{
ru[Belong[h]]++;
chu[Belong[i]]++;
}
}
}*/
int ans1=0,ans2=0;
ans2=max(ans2,ans1);
for(int i=1;i<=n;i++)
{
if(fe[i]==1)
{
printf("T\n");
}
else
{
printf("F\n");
}
}
}
void Insert(int x,int y)
{
len++;
e[len].to=y;
e[len].next=head[x];
head[x]=len;
}
void Dfs(int x)
{//puts("QQQQQQQQQQQQQQQAQQQQQQQQQQQQ");
Tim++;dfn[x]=Low[x]=Tim;q.push(x);flag[x]=1;
for(int i=head[x];i!=-1;i=e[i].next)
{
int t=e[i].to;
if(dfn[t]==0)
{
Dfs(t);
Low[x]=min(Low[x],Low[t]);
}
else if(flag[t]==1)Low[x]=min(Low[x],dfn[t]);
}
if(dfn[x]==Low[x])
{
cnt++;
int tot=0;
int k=0;
do
{
tot++;
k=q.top();q.pop();
fe[k]=1;
flag[k]=0;
Belong[k]=cnt;
}while(k!=x);
if(tot==1) fe[k]=0;
}
}
int hhh=ma();
int main()
{;
}