• FZU-2232 炉石传说(二分图匹配)


    Problem 2232 炉石传说

    Accept: 173    Submit: 629
    Time Limit: 1000 mSec    Memory Limit : 32768 KB

    Problem Description

    GG学长虽然并不打炉石传说,但是由于题面需要他便学会了打炉石传说。但是传统的炉石传说对于刚入门的GG学长来说有点复杂,所以他决定自己开发一个简化版的炉石传说。

    在简化版的炉石传说中:

    每个随从只有生命值和攻击力,并且在你的回合下,你的每只随从在本回合下只能选择一个敌方随从进行攻击。当两个随从a,b交战时,a的生命值将减去b的攻击力,b的生命值将减去a的攻击力,(两个伤害没有先后顺序,同时结算)。如果a或b的生命值不大于0,该随从将死亡。

    某一次对局中,GG学长和对手场面上均有n个随从,并且是GG学长的回合。由于GG学长是个固执的boy,他一定要在本回合杀死对方所有随从,并且保证自己的随从全部存活。他想知道能否做到。

    Input

    第一行为T,表示有T组数据。T<=100。

    每组数据第一行为n,表示随从数量(1 <= n <= 100)

    接下来一行2 * n个数字a1, b1, a2, b2, ... , an, bn (1 <= ai, bi <= 100)

    表示GG学长的n个随从,ai表示随从生命,bi表示随从攻击力

    接下来一行2 * n个数字c1, d1, c2, d2, ... , cn, dn (1 <= ci, di <= 100)

    表示对手的n个随从,ci表示随从生命,di表示随从攻击力。

    Output

    每组数据,根据GG是否能完成他的目标,输出一行”Yes”或”No”。

    Sample Input

    2 3 4 4 5 5 6 6 1 1 2 2 3 3 3 4 4 5 5 6 6 1 4 2 4 3 4

    Sample Output

    Yes No

    Source

    福州大学第十三届程序设计竞赛 
     
    事实证明,一个算法要经常写,否则就被其他东西挤出大脑了ovo
    此题其实就是二分图,裸的。我一开始参考一个标程,改的差不多了结果每次都错QAQ后来看了下自己的程序,然后就改对了QAQ我很好奇那货是怎么过的ovo
     1 #include "bits/stdc++.h"
     2 #define mem(a,b) memset(a,b,sizeof(a))
     3 using namespace std;
     4 typedef long long LL;
     5 const int MAX=105;
     6 int cas,n,ans;
     7 struct Stu{
     8     int x,y;
     9 }cc[MAX],vv[MAX];
    10 int cx[MAX],a[MAX][MAX];
    11 bool vis[MAX];
    12 void init(){
    13     int i,j;
    14     scanf("%d",&n);
    15     for (i=1;i<=n;i++) scanf("%d%d",&cc[i].x,&cc[i].y);
    16     for (i=1;i<=n;i++) scanf("%d%d",&vv[i].x,&vv[i].y);
    17     mem(a,0),mem(vis,false),mem(cx,-1);
    18     for (i=1;i<=n;i++)
    19      for (j=1;j<=n;j++)
    20       if ((cc[i].x-vv[j].y)>0 && (vv[j].x-cc[i].y)<=0)
    21        a[i][j]=1;
    22     ans=0;
    23 }
    24 int dfs(int x){
    25     int i,j;
    26     for (i=1;i<=n;i++)
    27         if (!vis[i] && a[x][i]){
    28             vis[i]=true;
    29             if (cx[i]==-1 || dfs(cx[i])){
    30                 cx[i]=x;
    31                 return 1;
    32             }
    33          }
    34     return 0;
    35 }
    36 int main(){
    37     freopen ("lushi.in","r",stdin);
    38     freopen ("lushi.out","w",stdout);
    39     int i,j;
    40     scanf("%d",&cas);
    41     while (cas--){
    42         init();
    43         for (i=1;i<=n;i++){
    44                 mem(vis,false);
    45                 ans+=dfs(i);
    46             }
    47         if (ans==n)
    48          puts("Yes");
    49         else
    50          puts("No");
    51     }
    52     return 0;
    53 }
    骚年不要总是心里想着标程
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
    HDU 4836 The Query on the Tree lca || 欧拉序列 || 动态树
    Android网络框架-Volley实践 使用Volley打造自己定义ListView
    Unity3D的ugui之按钮事件
    【Stage3D学习笔记续】真正的3D世界(六):空间大战
    【AwayPhysics学习笔记】:Away3D物理引擎的简介与使用
    【Away3D代码解读】(五):动画模块及骨骼动画
    【Away3D代码解读】(四):主要模块简介
    【Stage3D学习笔记续】真正的3D世界(五):粒子特效
    【Stage3D学习笔记续】真正的3D世界(四):空间大战雏形
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/6052736.html
Copyright © 2020-2023  润新知