• P2055-[ZJOI2009]假期的宿舍


      1 #include <bits/stdc++.h>
      2 #define _for(i,a,b) for(int i = (a);i < b;i ++)
      3 #define _rep(i,a,b) for(int i = (a);i > b;i --)
      4 #define maxn 139*2
      5 #define INF 0x3f3f3f3f
      6 #define MOD 1000000007
      7 typedef long long ll;
      8 using namespace std;
      9 inline ll read()
     10 {
     11     ll ans = 0;
     12     char ch = getchar(), last = ' ';
     13     while(!isdigit(ch)) last = ch, ch = getchar();
     14     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
     15     if(last == '-') ans = -ans;
     16     return ans;
     17 }
     18 inline void write(ll x)
     19 {
     20     if(x < 0) x = -x, putchar('-');
     21     if(x >= 10) write(x / 10);
     22     putchar(x % 10 + '0');
     23 }
     24 int n;
     25 int isST[maxn],goHM[maxn];
     26 int beFM[maxn][maxn];
     27 int a[maxn][maxn];
     28 bool used[maxn];
     29 void get()
     30 {
     31     n = read();
     32     memset(isST,0,sizeof(isST));
     33     memset(goHM,0,sizeof(goHM));
     34     memset(beFM,0,sizeof(beFM));
     35     memset(a,0,sizeof(a));
     36     _for(i,0,n)
     37         isST[i] = read();
     38     _for(i,0,n)
     39     {
     40         int a = read();
     41         if(!isST[i])
     42             continue;
     43         goHM[i] = a;
     44     }
     45     _for(i,0,n)
     46     _for(j,0,n)
     47     beFM[i][j] = read();
     48 }
     49 int linker[maxn];
     50 int cnt = 0;
     51 bool dfs(int u)
     52 {
     53     _for(v,0,n)
     54         if(isST[v] && a[u][v] && !used[v])
     55         {
     56             used[v] = true;
     57             if(linker[v] == -1 || dfs(linker[v]))
     58             {
     59                 linker[v] = u;
     60                 return true;
     61             }
     62         }
     63     return false;
     64 }
     65 int hungry()
     66 {
     67     int res = 0;
     68     memset(linker,-1,sizeof(linker));
     69     _for(u,0,n)
     70     {
     71         memset(used,false,sizeof(used));
     72         if((!isST[u] || (isST[u]&&!goHM[u])) && dfs(u))
     73             res    ++;
     74     }
     75     return res;
     76 }
     77 int main()
     78 {
     79     int T;
     80     T = read();
     81     while(T--)
     82     {
     83         get();
     84         cnt = 0;
     85         _for(i,0,n)
     86         if(!isST[i] || (isST[i]&&!goHM[i]))
     87             cnt ++;
     88         _for(i,0,n)
     89         {
     90             if(isST[i] && !goHM[i])
     91                 a[i][i] = 1;
     92             _for(j,0,n)
     93             if(beFM[i][j] && isST[j])
     94                 a[i][j] = 1;
     95         }
     96         if(hungry()==cnt)
     97             printf("^_^
    ");
     98         else
     99             printf("T_T
    ");
    100     }
    101     return 0;
    102 }
  • 相关阅读:
    Ocelot简易教程(二)之快速开始1
    Ocelot简易教程(一)之Ocelot是什么
    InfluxDB学习之InfluxDB的基本操作
    InfluxDB入门教程
    .NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控
    .net Core 微服务
    IdentityServer4 接口说明
    WINDOWS命令行关闭本地占用的端口
    并发负载压力测试
    C#操作Mongodb
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11544198.html
Copyright © 2020-2023  润新知