题目链接

题意:t 组測试数据,每组測试数据有 n个人,m条关系

每条关系能够是 “线上关系” 或者 “线下关系”。 要求每一个人的线上关系(条数) == 线下关系(条数)

问共同拥有几种分配方法

思路:

①由于要使每一个人的线上关系的总数 == 线下关系 的总数。那么总关系数一定是偶数所以当m为奇数时,方法数肯定为0;

②由于每条边仅仅有两种状态。online 或 offline,所以能够用壮压来做,1表示online, 0表示offline;

③m最大有 (8*(8-1))/2 = 28条,1<<28 非常大,要TLE,所以用中途相遇法来做

④将每种状态每一个点的 online 和offline个数到 p[N] 里(p[N]用pair定义)然后前半部分倒置存入map数组就能够了

代码例如以下:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std; typedef long long ll;
typedef pair<ll, ll>pii;
const int N = 1e5+10;
const int INF = 1e9+7;
int n, m;
int x[100], y[100];
int s[100], e[100];
int on[10], off[10];
map<pii, int>mp;
pii p[1 << 14]; void work()
{
for(int i = 0; i < (1 << (m/2)); i++)
{
memset(on, 0,sizeof(on));
memset(off, 0, sizeof(off));
for(int j = 0; j < (m/2); j++)
{
if(i & (1 << j))
{
on[s[j]]++, on[e[j]]++;
}
else
{
off[s[j]]++, off[e[j]]++;
}
}
for(int k = 0; k < n; k++)
{
int cnt = min(on[k], off[k]);
on[k] -= cnt, off[k] -= cnt;
}
p[i] = {0,0};
for(int k = 0; k < n; k++)
{
p[i].first = p[i].first * 100 + on[k];
p[i].second = p[i].second * 100 + off[k];
}
}
} int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++)
{
scanf("%d%d", &x[i], &y[i]);
x[i]--, y[i]--;
}
if(m % 2)
{
printf("0\n"); continue;
}
for(int i = 0; i < (m/2); i++)
{
s[i] = x[i], e[i] = y[i];
}
work();
mp.clear();
for(int i = 0; i < (1 << (m/2)); i++)
{
mp[{p[i].second, p[i].first}]++;
}
for(int i = m/2; i < m; i++)
{
s[i-m/2] = x[i], e[i-m/2] = y[i];
}
work();
ll ans = 0;
for(int i = 0; i < (1 << (m/2)); i++)
{
if(mp.count(p[i]))
{
ans += mp[p[i]];
}
}
printf("%I64d\n", ans);
}
return 0;
}

2015 Multi-University Training Contest 2 1006 Friends 壮压的更多相关文章

  1. 2015 Multi-University Training Contest 2 1006 Friends

    Friends Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5305 Mean: n个人,m对朋友关系,每个人的朋友中又分为在线 ...

  2. 2015 Multi-University Training Contest 3 1006 Beautiful Set

    Beautiful Set Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5321 Mean: 给出一个集合,有两种计算集合的值的 ...

  3. HDU 6324.Problem F. Grab The Tree-博弈(思维) (2018 Multi-University Training Contest 3 1006)

    6324.Problem F. Grab The Tree 题目看着好难,但是题解说的很简单,写出来也很简单.能想出来就是简单的,想不出来就难(讲道理,就算是1+1的题目,看不出来就是难的啊). 和后 ...

  4. 2019 Multi-University Training Contest 8 - 1006 - Acesrc and Travel - 树形dp

    http://acm.hdu.edu.cn/showproblem.php?pid=6662 仿照 CC B - TREE 那道题的思路写的,差不多.也是要走路径. 像这两种必须走到叶子的路径感觉是必 ...

  5. 2019 Multi-University Training Contest 7 - 1006 - Snowy Smile - 线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=6638 偷学一波潘哥的二维离散化和线段树维护最大子段和. 思路是枚举上下边界,但是不需要从左到右用最大子段和dp. ...

  6. 2019 Multi-University Training Contest 3 - 1006 - Fansblog - 打表 - 暴力

    http://acm.hdu.edu.cn/showproblem.php?pid=6608 题意:给一个比较大的质数P(1e14以内),求比它小的最大的质数Q(貌似保证存在的样子,反正我没判不存在) ...

  7. 2015 Multi-University Training Contest 8 hdu 5385 The path

    The path Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on HDU. Original ID: 5 ...

  8. 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)

    官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...

  9. 2015 Multi-University Training Contest 8 hdu 5390 tree

    tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...

随机推荐

  1. 利用道格拉斯·普客法(DP法)压缩矢量多边形(C++)

    1.算法描述 经典的Douglas-Peucker算法(简称DP法)描述如下: (1)在曲线首尾两点A,B之间连接一条直线AB,该直线为曲线的弦: (2)得到曲线上离该直线段距离最大的点C,计算其与A ...

  2. SqlServer执行存储过程时,参数值为null,sql语句参数值变成default

    从C#代码里传入参数到调用存储过程,参数的值为null,执行存储过程一直提示需要参数 '@xxx',但未提供该参数.通过profiler发现生成的参数值变成为default. 解决方案:1.将Para ...

  3. 利用javascript(自定义事件)记录尺寸可变元素的尺寸变化过程

    1.效果图 2.源码 <%@ page contentType="text/html;charset=UTF-8" language="java" %&g ...

  4. vue2.0.js

     数据的渲染.数据同步  组件化.模块化 路由    ajax  数据流 Vue.js学习资源        中文官网:http://cn.vuejs.org/             源码:http ...

  5. Android Fragment 初步解析

    Fragment经常在我们的开发中见到,但是自我感觉对Fragment的理解还是处于初级的阶段,接下来我将用几篇文章尽量深的解析Fragment 让我们开始吧!!! Fragment的生命周期 Fra ...

  6. Docker-compose Setup for Self-hosting Development & Deployment Tools

    Last week I wrote about my self-hosted Sentry install in 3 Docker containers. This week I want to br ...

  7. Spring DATA MongoDB @DBref查询,or和and联合查询

    @DBref文档关联,在按该类型查询的时候,在字段名后加上关联表的字段名即可,如: Criteria.where("bloggroup.$id"), $id代表关联表的oid字段. ...

  8. Win8.1应用开发之适配器模式(C#实现)

    实际上适配器模式是用于解耦.设想一下我们的程序模块A在与模块B打交道时,需要在许多地方多次使用B中某个类的方法,而负责开发B的程序猿Tom还未完全实现该类,会随时更改该类中的方法,那么当Tom在修改时 ...

  9. 使用UMDH进行内心泄露分析

    事前准备 1.安装windbg,安装好后在path中添加其安装目录(目的是为了执行命令行简单) 2.(设置符号路径,一般为接口所在路径)运行cmd,执行命令:set _NT_SYMBOL_PATH=d ...

  10. (转) RabbitMQ学习之发布/订阅(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40887733 参考:http://blog.csdn.NET/lmj623565791/artic ...