cerc2017 Justified Jungle

原创 2018年04月16日 18:02:07

题意:一棵树有多少种切法使得每个分离的子树节点数相同,并输出每种方法需要切边的数目,升序输出;

首先,想要均分这个树,那么剩下的子树节点必定是总节点数的因子(根据题意,排除这个数本身);

打个表,1~1e6的数最多有240个因子,那么只需要枚举因子,给的是6s;

先转换为有根树,枚举每条边,只要这个边下的子树节点数是枚举的因子的倍数,ans++;

最后如果[n/(枚举的因子)]-1==ans,则枚举得因子合法;

因为如果恰好能够被均分,需要割的边数为[n/因子]-1;

AC代码:

#include <iostream>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
const int maxn=1e6+10;
int q,head[2*maxn],sub[maxn],vis[maxn],sto[300],k,s[300];
struct point{
    int to;
    int next;
}pt[2*maxn];
void init()
{
    q=k=0;
    memset(head,-1,sizeof(head));
    memset(vis,0,sizeof(vis));
}
void add(int u,int v)
{
    pt[q].next=head[u];
    pt[q].to=v;
    head[u]=q++;
}
int dfs(int st)
{
    vis[st]=1;
    for (int i=head[st];i!=-1;i=pt[i].next)
    {
        int to=pt[i].to;
        if (!vis[to])
        {
            sub[st]+=dfs(to);
        }
    }
    return sub[st];
}
void carry(int x)
{
    int r;
    for (int i=1;i<=sqrt(x+0.5);i++)
    {
        if (x%i==0)
        {
            r=x/i;
            if (r==i)
            sto[k++]=r;
            else
            {
                sto[k++]=i;
                sto[k++]=r;
            }
        }
    }
}
int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,cnt,u,v,p=0;
    init();
    cin>>n;
    for (int i=1;i<=n-1;i++)
    {
        cin>>u>>v;
        add(u,v);
        add(v,u);
    }
    carry(n);
    for (int i=1;i<=n;i++)
        sub[i]=1;
    dfs(1);
//  for (int i=1;i<=n;i++)
//      cout<<i<<"*******"<<sub[i]<<endl;
    for (int i=0;i<k;i++)
    {
        cnt=0;
        for (int j=2;j<=n;j++)
        {
            if (sub[j]%sto[i]==0)
            cnt++;
        }
        if (n/sto[i]-1==cnt&&cnt!=0)
        s[p++]=(n/sto[i]-1);
    }
    sort(s,s+p);
    for (int i=0;i<p;i++)
    {
        if (i==0)
        cout<<s[i];
        else
        cout<<" "<<s[i];
    }
    cout<<endl;
    return 0;
     
}
/**************************************************************
    Problem: 5085
    User: DP43
    Language: C++
    Result: 正确
    Time:2452 ms
    Memory:56248 kb
****************************************************************/

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37109329/article/details/79963923

CERC2016 gym101173L

Problem L: Lost LogicGustav is reading about 2-satisfiability, a well known problem of assigning trut...
  • CZWin32768
  • CZWin32768
  • 2017-02-15 16:26:36
  • 315

CodeForces Gym 101620简要题解

Assignment Algorithm模拟。#include #define xx first #define yy second #define mp make_pair #define pb ...
  • wxh010910
  • wxh010910
  • 2017-12-15 14:06:34
  • 328

GNS3 jungle newsfeed 隐藏

Windows 7 1.开始---运行 输入(没有引号):“%appdata%”  2.修改---GNS3/gns3_gui.ini 的两行参数 "default_local_new...
  • samtaoys
  • samtaoys
  • 2016-11-24 11:40:37
  • 282

Jungle Roads(最小生成树+并查集)

Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...
  • cs_zlg
  • cs_zlg
  • 2012-11-13 23:01:41
  • 1445

CERC2017 F: Faulty Factorial 简单数论题

传送门:Faulty Factorial分析:分为n==p, n&amp;gt;=2*p, 2*p&amp;gt;n&amp;gt;p , n&amp;lt;p 四种情况讨论其中n==p使用到了威尔逊...
  • computer_user
  • computer_user
  • 2018-04-08 16:14:38
  • 71

九度 oj 题目1154:Jungle Roads

http://ac.jobdu.com/problem.php?pid=1154 最小生成树:堆+并查集 #include #include typedef struct edge{ ...
  • guojiaqi007
  • guojiaqi007
  • 2017-01-21 11:02:28
  • 102

九度 题目1154:Jungle Roads

题目描述:         The Head Elder of the tropical island of Lagrishan has a problem. A burst of...
  • j754379117
  • j754379117
  • 2014-11-20 00:24:30
  • 729

题目1154:Jungle Roads

题目描述:         The Head Elder of the tropical island of Lagrishan has a problem. A burst of...
  • u011325614
  • u011325614
  • 2013-08-19 20:57:03
  • 628

CERC 2017 H:Hidden Hierarchy (模拟)

 Hidden Hierarchy时间限制: 1 Sec  内存限制: 512 MB提交: 84  解决: 11[提交][状态][讨论版][命题人:admin]题目描述You are working ...
  • sizaif
  • sizaif
  • 2018-04-16 20:58:25
  • 15

HDU 1301 &POJ 1215 Jungle Roads【最小生成树,Prime算法+Kruskal算法】

Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...
  • hurmishine
  • hurmishine
  • 2016-08-04 21:39:57
  • 1776
收藏助手
不良信息举报
您举报文章:cerc2017 Justified Jungle
举报原因:
原因补充:

(最多只允许输入30个字)