记录编号 152202 评测结果 AAAAAAAAAA
题目名称 [東方S1] 上白泽慧音 最终得分 100
用户昵称 GravatarSatoshi 是否通过 通过
代码语言 C++ 运行时间 0.017 s
提交时间 2015-03-13 19:46:08 内存使用 0.49 MiB
显示代码纯文本
#include <fstream>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cmath>
#include <string>
#include <deque>
#include <map>
#include <list>
#include <stack>
using namespace std;
int n,m,low[5001],l[5001],t=0,w=0,dfn[5001]={0},ans=0,maozhuxi=9999999,k=0;
vector<int>f[5001],scc[5001];
	ifstream in("classroom.in");
	ofstream out("classroom.out");
stack<int> s;
void tarjan(int u) {
    dfn[u] = low[u] = ++t;
    l[u] = 1;
    s.push(u);
    for(int i=0; i<f[u].size(); i++) 
	{
        int v = f[u][i];
        if(!dfn[v]) {
            tarjan(v);
            low[u] = min(low[u], low[v]);
        } else if(l[v])
            low[u] = min(low[u], dfn[v]);
    }
    if(dfn[u] == low[u])
	{
        w++;
		int v;
        do 
		{
            l[v = s.top()] = 0;
			scc[w].push_back(v);
            s.pop();
        } while(u != v);
    }
}
int main()
{
	int i,j,x1,x2,x3;

	in>>n>>m;
	for(i=1;i<=m;i++)
	{
		in>>x1>>x2>>x3;
		if(x3==2)
		{
			f[x1].push_back(x2);
			f[x2].push_back(x1);
		}
		else
		{
			f[x1].push_back(x2);
		}
	}
	for(i=1;i<=n;i++)
	{
		if(!dfn[i])tarjan(i);
	}
	/*for(i=1;i<=n;i++)
	{
		out<<i<<' '<<':';
		for(j=0;j<f[i].size();j++)
		{
			out<<f[i][j]<<' ';
		}
		out<<endl;
	}*/
	
	for(i=1;i<=w;i++)
	{
		int q=scc[i].size();
		if(q>ans)ans=q;
		sort(scc[i].begin(),scc[i].end());
	}
	/*for(i=1;i<=w;i++)
	{
		for(j=0;j<scc[i].size();j++)
		{
			out<<scc[i][j]<<' ';
		}
		out<<endl;
	}*/
	for(i=1;i<=w;i++)
	{
		if(scc[i].size()==ans)
		{
			if(scc[i][0]<maozhuxi)
			{
				maozhuxi=scc[i][0];
				k=i;
			}
		}
	}
	out<<ans<<endl;
	for(i=0;i<scc[k].size();i++)out<<scc[k][i]<<' ';
	in.close();
	out.close();
	return 0;
}