題目地址:點擊打開鏈接
思路:如果凡神的卡能干掉對面的卡并且自己卡不死,那么這兩張卡建立個關系,然后裸
的匈牙利,看看最大匹配是不是n。
代碼:
#include<iostream>#include<cstdio>#include<cstring>#include<vector>using namespace std;const int maxn = 105;vector<int> g[maxn];int n, match[maxn], vis[maxn];struct node{ int a, b;}a[maxn], b[maxn];bool dfs(int x){ for(int i = 0; i < g[x].size(); i++) { int to = g[x][i]; if(!vis[to]) { vis[to] = 1; if(!match[to] || dfs(match[to])) { match[to] = x; return 1; } } } return 0;}int Hungary(){ int res = 0; memset(match, 0, sizeof(match)); for(int i = 1; i <= n; i++) { memset(vis, 0, sizeof(vis)); res += dfs(i); } return res;}int main(void){ int t; cin >> t; while(t--) { scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d%d", &a[i].a, &a[i].b); for(int i = 1; i <= n; i++) scanf("%d%d", &b[i].a, &b[i].b); for(int i = 1; i <= n; i++) g[i].clear(); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) if(a[i].a > b[j].b && a[i].b >= b[j].a) g[i].push_back(j); puts(Hungary()==n ? "Yes" : "No"); } return 0;}一道非常簡單的爐石題
發布時間: 2016年6月26日 20:36 最后更新: 2016年6月26日 20:39 時間限制: 1000ms 內存限制: 256M
cfenglv學長雖然并不打爐石傳說,但是由于某爐石愛好者的忽悠,他就想去學一下如何玩爐石傳說。
傳統的爐石傳說對于剛入門的cfenglv學長來說有點復雜,于是某個爐石愛好者順手又開發了一款簡化版爐石傳說,想讓cfenglv學長先玩簡化版爐石傳說上手。
在簡化版的爐石傳說中,每個隨從只有生命值和攻擊力,并且在你的回合下,你的每只隨從在本回合下只能選擇一個敵方隨從進行攻擊。當兩個隨從a,b交戰時,a的生命值將減去b的攻擊力,b的生命值將減去a的攻擊力,(傷害沒有先后順序,同時結算)。如果a或b的生命值不大于0,該隨從將死亡。
某一次對局中,cfenglv學長和對手場面上均有n個隨從,并且是cfenglv學長的回合。
由于cfenglv學長是個固執的boy,他一定要在本回合殺死對方所有隨從,并且保證自己的隨從全部存活。他想知道能否做到。
第一行為T,表示有T組數據。T <= 500。每組數據第一行為n,表示隨從數量(1 <= n <= 100)。接下來一行2 * n個數字a1, b1, a2, b2, ... , an, bn (1 <= ai, bi <= 30),表示cfenglv學長的n個隨從,ai表示隨從生命,bi表示隨從攻擊力。接下來一行2 * n個數字c1, d1, c2, d2, ... , cn, dn (1 <= ci, di <= 30),表示對手的n個隨從,ci表示隨從生命,di表示隨從攻擊力。
每組數據,根據cfenglv是否能完成他的目標,輸出一行”Yes”或”No”。
234 4 5 5 6 61 1 2 2 3 334 4 5 5 6 61 4 2 4 3 4YesNo
新聞熱點
疑難解答