tyvj 1593

背景

传说中,有这样一个部落.......

描述

原始部落byteland中的居民们为了争夺有限的资源,经常发生冲突,几乎每个居民都有仇敌。村落酋长为了组织一支保卫部落的队伍,希望从部落的居民中选出至多的居民入伍,并保证队伍中的任何2个人都不是仇敌。

给定byteland部落中居民之间的仇敌关系,编程计算组成部落卫队的最佳方案。

格式

输入格式

第一行有2个正整数n和m,表示byteland部落中有n个居民,居民间有m个仇敌关系。接下来的m行中,每行有2个正整数u和v,表示居民u与居民v是仇敌。

(居民编号按输入顺序为1,2...n)

输出格式

第一行是部落卫队的最多人数。第二行是卫队组成xi,1<=i<=n,xi=0表示居民i不在卫队中,xi=1表示居民i在卫队中。

(有多组解时先选编号小的入伍)

样例1

样例输入1[复制]

7 10
1 2
1 4
2 4
2 3
2 5
2 6
3 5
3 6
4 5
5 6

样例输出1[复制]

3
1 0 1 0 0 0 1 

限制

只有1s

提示

40%的n满足n<=100,100%的n满足n<=120
100%的m满足m<=5000

简单的搜索,多剪剪枝,期待大牛们的秒杀~

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
using namespace std;
#define INF 1<<30
int n,m,a[110][110],temp[110],ans[110],step,best;
void dfs(int x)
{
      if(x==n)
      {
            if(step>best)
            {
                 best=step;
                 memcpy(ans,temp,sizeof(int)*n);
            }
            return ;
      }
      bool flag=true;
      for(int i=0;i<x;i++)
      {
           if(temp[i]==1&&a[i][x]==0)
           {
                 flag=false;
                 break;
           }
      }
      if(flag)
      {
            step++;
            temp[x]=1;
            dfs(x+1);
            step--;
            temp[x]=0;
      }
      if(step+n-x-1>best)
      {
            temp[x]=0;
            dfs(x+1);
      }
}
int main()
{
      int x,y;
      scanf("%d%d",&n,&m);
      for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                  a[i][j]=1;
      for(int i=0;i<m;i++)
      {
            scanf("%d%d",&x,&y);
            a[x-1][y-1]=0;
            a[y-1][x-1]=0;
      }
      dfs(0);
      printf("%d\n",best);
      for(int i=0;i<n-1;i++)
            printf("%d ",ans[i]);
      printf("%d\n",ans[n-1]);
      return 0;
}

  

时间: 2024-08-07 16:41:13

tyvj 1593的相关文章

TYVJ 2049 魔法珠 sg函数

题意:链接 方法:sg函数 解析: tyvj的题大部分都没题解啊- - 不过这样貌似会更好?感觉做这的题都需要自己动脑啊- - 虽然嘴上说着好烦然而心里觉得好评? 回归正题 设sg[x]表示数x的sg值,这好像是废话 然后对于读入的a[i],将所有的a[i]的sg值异或起来如果不是零则先手赢反之后手 维护的时候有个坑. 每次求约数的时候,数组要在sg里开,因为如果递归下去的话,全局变量的话会被更改,会被坑死. 然后就是怎么维护了 对于x,先求约数 之后枚举哪个数不取,将其他的异或(或者先都异或起

bzoj 3224: Tyvj 1728 普通平衡树.

3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 15114  Solved: 6570[Submit][Status][Discuss] Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为

Bzoj3196 Tyvj 1730 二逼平衡树

Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3350  Solved: 1324 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的前驱(前驱定义为小于x,且最大的数)5.查询k在区间内的后继(后继定义为大于x,且最小的数) Input 第一行两个数 n,m 表示长度为n的有序序列和m个操作第二行

3223: Tyvj 1729 文艺平衡树

3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3473  Solved: 1962[Submit][Status][Discuss] Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 Input 第一行为n,m n表示初始序列有n个数,这个序列依次

【数学】XMU 1593 找数字

题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1593 题目大意: T组数据,n个数,只有一种出现q次,其余的出现p次.(1<=T<=100,1<=n<=107,1<p,q<200,gcd(p,q)=1) 题目思路: [数学] 我也不知道这题算不算数学类问题,总之我是不会做的.看了题解还是有些懵逼. 还是orz一下学长吧 我们想象一个简化版的:有n个数字,其中有1个数会出现1次,其余数都会出现两次,求出现1

【bfs】【中等难度】tyvj P1234 - bench与奔驰

P1234 - bench与奔驰 From zhangbh001    Normal (OI) 总时限:10s    内存限制:128MB    代码长度 限制:64KB P1234 - bench与奔驰 背景 Background 公园里有个人在练开奔驰 - -!,但是总是撞在bench上 (众人曰:狼来了,快跑啊!) 描述 Description 公园里的bench与奔驰都是无敌的,不会被撞坏.由于开奔驰的人比较"有特点",总是向上下左右四个方向开,而且只会在撞到椅子之后改变方向(

HDU 1593 find a way to escape

find a way to escape Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1389    Accepted Submission(s): 508 Problem Description 一日,话说0068与***泛舟湖上.忽见岸边出现他的一大敌人elnil.0068当然不想落入elnil的魔爪,于是他就得想办法逃脱. 这

tyvj p1016 装箱问题

装箱问题From admin 描述 Description 有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30), 每个物品有一个体积 (正整数). 要求从 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入格式 InputFormat第一行,一个整数,表示箱子容量:第二行,一个整数,表示有n个物品:接下来n行,分别表示这n个物品的各自体积.输出格式 OutputFormat一个整数,表示箱子剩余空间. 简单DP 01背包 #include<stdio.

BZOJ 3223: Tyvj 1729 文艺平衡树

3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3629  Solved: 2053[Submit][Status][Discuss] Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 Input 第一行为n,m n表示初始序列有n个数,这个序列依次