比赛 不准粘代码,必须自己写(HS除外) 评测结果 AAAAAAAAAA
题目名称 矿场搭建 最终得分 100
用户昵称 ShallowDream雨梨 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2019-10-02 16:24:01
显示代码纯文本
        #include<bits/stdc++.h>
        #define qwe cout<<"qwq"
        #define ll long long 
        #define me(qwr) memset(qwr,0,sizeof(qwr))
        using namespace std;const int maxn=1005;
        ll qr,ans1,ans2,maxx,is,fei,qwq,tot,head[maxn],cut[maxn],f[maxn],child;
        ll dfn[maxn],low[maxn],cnt;
        ll vis[maxn];
        void init(){
        maxx=qwq=tot=cnt=0;
        ans1=0;ans2=1;
    	me(head);me(vis);me(dfn);me(low);me(cut);me(f);}
        struct _{int to,next;}a[maxn];
         void add(int x,int y){
          a[++tot].to=y;
          a[tot].next=head[x];
          head[x]=tot;}
        void tarjan(int x){
       	cnt++;
       	dfn[x]=low[x]=cnt;
       	int child=0;
       	for(int i=head[x];i;i=a[i].next){
       	if(dfn[a[i].to]==0){
     		child++;
     		f[a[i].to]=x;
       	tarjan(a[i].to);
       	low[x]=min(low[x],low[a[i].to]);
       	if(low[a[i].to]>=dfn[x])cut[x]=1;}
        else low[x]=min(low[x],dfn[a[i].to]);}
        if(f[x]==0&&child==1)cut[x]=0;}	
        void dfs(int x){
       //zushu
    	fei++;
       	vis[x]=qwq;
       	for(int i=head[x];i;i=a[i].next){
       	int to=a[i].to;
       	if(cut[to]==1&&vis[to]!=qwq)is++,vis[to]=qwq;
       	if(vis[to]==0)
       	dfs(to);}}
        int wjr(){
    	 	freopen("bzoj_2730.in","r",stdin);
         	freopen("bzoj_2730.out","w",stdout);
       ll n,q,w;
        while(1){
        cin>>n;
        if(n==0)break;
       	init();
       	for(int i=1;i<=n;i++)
    	cin>>q>>w,add(q,w),add(w,q),
        maxx=max(maxx,q),maxx=max(maxx,w);
        for(int i=1;i<=maxx;i++)
        if(dfn[i]==0)tarjan(i);
        for(int i=1;i<=maxx;i++){
        if(vis[i]==0&&cut[i]==0){
    	is=fei=0,qwq++,dfs(i);
        if(is==0){
       	ans1++;ans1++;
       	ans2*=(fei-1)*fei/2;}
       	if(is==1){
       	ans1++;
       	ans2*=fei;}}}
       	qr++;
       	cout<<"Case "<<qr<<": "<<ans1<<" "<<ans2<<endl;
        }
    	return 0; } 
        int sjm=wjr();
        int main(){;
        }