Comparing Your Heros拓扑序列的数量
给出N行英雄的比较,每一行包含两个英雄的名字,代表第一个英雄比第二个英雄更受欢迎。
英雄的数目不超过16个。问有多少种可能的受欢迎程度的序列满足N行英雄的比较。
由于只有英雄数目不超过16个,可以用二进制来解决。
x的的位表示还有哪些点没有处理。在这些点中选择一个入度没零的点,求剩下的点可能排列的数目。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <list>
using namespace std;
const int INF=0x5fffffff;
const double EXP=1e-;
const int MS=<<;
int edges[][];
int in[];
int base[];
int flag[MS];
char name[][];
int n,m; int ID(char *s)
{
for(int i=;i<n;i++)
{
if(!strcmp(name[i],s))
return i;
}
strcpy(name[n],s);
return n++;
} int find(int x) //x的二进制的位表示那些点还没有处理。
{
if(flag[x]>)
return flag[x];
for(int i=;i<n;i++)
{
if(in[i]==&&((x&base[i])==base[i]))
{
for(int j=;j<n;j++)
if(edges[i][j])
in[j]--;
flag[x]+=find(x^base[i]);// 去掉i点后,剩下的点有多少种可能
for(int j=;j<n;j++)
if(edges[i][j])
in[j]++;
}
}
return flag[x];
} int main()
{
char a[],b[];
for(int i=;i<;i++)
base[i]=<<i;
while(scanf("%d",&m)!=EOF)
{
n=; //顶点数量
int c,d;
memset(flag,,sizeof(flag));
memset(edges,,sizeof(edges));
memset(in,,sizeof(in));
for(int i=;i<m;i++)
{
scanf("%s%s",a,b);
c=ID(a);
d=ID(b);
edges[c][d]=;
in[d]++;
}
for(int i=;i<n;i++)
flag[base[i]]=;
int ans=find(base[n]-);
printf("%d\n",ans);
}
return ;
}
Comparing Your Heros拓扑序列的数量的更多相关文章
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
- SDUT-2140_判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一个有向图,判 ...
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个有向图 ...
- SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Prob ...
- Southern African 2001 框架折叠 (拓扑序列的应用)
本文链接:http://www.cnblogs.com/Ash-ly/p/5398377.html 题目:考虑五个图片堆叠在一起,比如下面的9 * 8 的矩阵表示的是这些图片的边缘框. 现在上面的图片 ...
- SDUT2140图结构练习——判断给定图是否存在合法拓扑序列
拓扑序列的判断方法为不存在有向环,代码实现的话有两种,一种是直接去判断是否存在环,较为难理解一些,另一种的话去判断结点入度,如果存在的入度为0的点大于一个,则该有向图肯定不存在一个确定的拓扑序列 #i ...
- acwing 848 有向图的拓扑序列
地址 https://www.acwing.com/problem/content/description/850/ 题目描述给定一个n个点m条边的有向图,图中可能存在重边和自环. 请输出任意一个该有 ...
- (转)AS3正则:元子符,元序列,标志,数量表达符
(转)AS3正则:元子符,元序列,标志,数量表达符: AS3正则:元子符,元序列,标志,数量表达符 七月 4th, 2010 归类于 AS3前端技术 作者Linkjun 进行评论 as3正则:元子符, ...
- Java实现蓝桥杯模拟正整数序列的数量
问题描述 小明想知道,满足以下条件的正整数序列的数量: 1. 第一项为 n: 2. 第二项不超过 n: 3. 从第三项开始,每一项小于前两项的差的绝对值. 请计算,对于给定的 n,有多少种满足条件的序 ...
随机推荐
- (翻译)异步编程之Promise(1):初见魅力
原文:https://www.promisejs.org/ by Forbes Lindesay 异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2) ...
- Mac 与 PC 键盘布局对比
- Android SDK Manager更新不了的解决办法
android SDK Manager更新不了,出现错误提示:"Failed to fetch URL..."! 可以用以下办法解决: 使用SDK Manager更新时出现问题 F ...
- C# 特性详解(上)
特性(attribute)是被指定给某一声明的一则附加的声明性信息. 元数据,就是C#中封装的一些类,无法修改.类成员的特性被称为元数据中的注释. 1.什么是特性 1)属性与特性的区别 属性 ...
- 圣杯VS双飞翼
双飞翼: <!DOCTYPE html> <html> <head> <title>推荐封面</title> <meta name=& ...
- js 函数的传值问题
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- jQuery实现的瀑布流效果, 向下滚动即时加载内容
下拉滚动条或鼠标滚轮滚动到页面底部时, 动态即时加载新内容. 后台用 json 传输数据, 示例程序中只写了示例数组.数据也只设置了两个属性, 需根据实际应用改写. 页面用了 ul li 做为容器 ...
- Cortex-M3 Context Switching
http://www.embedded.com/design/embedded/4231326/Taking-advantage-of-the-Cortex-M3-s-pre-emptive-cont ...
- IE自动化 二(判断IP所在地)
该脚本用来访问一个url,并取出相应结果(该脚本用来通过淘宝API实现判断一个IP所在地) #定义要访问的URL $url="http://ip.taobao.com/service/get ...
- radvd.conf RADVD配置文件内容部分解析
interface eth0{ AdvSendAdvert on; #启用路由器公告(RA)功能 MinRtrAdvInterval ; #每隔30-100秒间隔发送公告消息 MaxRtrAdvInt ...