【题解】[P3557 POI2013]GRA-Tower Defense Game

【题解】[P3557 POI2013]GRA-Tower Defense Game

这道题是真的**

根据题目给的\(k\),可以知道,我们随便放塔,只要不全放一起,一定是一种合法的方案。

直接枚举就好了,脑子都不用,时间复杂度\(O(n)\)

#include<bits/stdc++.h>

using namespace std;
#define RP(t,a,b) for(register int t=(a),edd=(b);t<=edd;++t)
#define DRP(t,a,b) for(register int t=(a),edd=(b);t>=edd;--t)
#define ERP(t,a) for(register int t=head[a];t;t=e[t].nx)
#define Max(a,b) ((a)<(b)?(b):(a))
#define Min(a,b) ((a)<(b)?(a):(b))
#define endl ‘\n‘
#define midd register int mid=(l+r)>>1
#define TMP template < class ccf >

TMP inline ccf qr(ccf b){
    char c=getchar();
    int q=1;
    ccf x=0;
    while(c<48||c>57)
    q=c==45?-1:q,c=getchar();
    while(c>=48&&c<=57)
    x=x*10+c-48,c=getchar();
    return q==-1?-x:x;
}
const int maxn=500005;
struct E{
    int to,nx;
}e[maxn<<2];
int head[maxn];
int cnt;
inline void add(int fr,int to,bool f){
    e[++cnt]=(E){to,head[fr]};
    head[fr]=cnt;
    if(f)
    add(to,fr,0);
}
int n,m,k;
bool usd[maxn];
bool ans[maxn];

int main(){
#ifndef ONLINE_JUDGE
    freopen("in.in","r",stdin);
    freopen("out.out","w",stdout);
#endif
    n=qr(1);
    m=qr(1);
    k=qr(1);
    register int t1,t2;
    RP(t,1,m){
    t1=qr(1);
    t2=qr(1);
    add(t1,t2,1);
    }
    RP(t,1,n){
    if(!usd[t]){
        usd[t]=1;
        ans[t]=1;
        ERP(i,t){
        usd[e[i].to]=1;
        ERP(f,e[i].to)
            usd[e[f].to]=1;
        }
    }
    }

    int qaq=0;
    RP(t,1,n)
    if(ans[t])
        qaq++;
    cout<<qaq<<endl;
    RP(t,1,n)
    if(ans[t])
        cout<<t<<‘ ‘;

    return 0;
}

原文地址:https://www.cnblogs.com/winlere/p/10353199.html

时间: 2024-07-28 17:59:32

【题解】[P3557 POI2013]GRA-Tower Defense Game的相关文章

hdu4939 Stupid Tower Defense(Dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4939 Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 493    Accepted Submission(s): 129 Problem Description FSF is addicte

hdu 4939 Stupid Tower Defense ( dp )

题目链接 题意:给出一条长为n个单位长度的直线,每通过一个单位长度需要t秒. 有3种塔,红塔可以在当前格子每秒造成x点伤害,绿塔可以在之后的格子每秒造成y点伤害, 蓝塔可以使通过单位长度的时间增加z秒.问如何安排3种塔的顺序使得造成的伤害最大,输出最大伤害值. 分析:比赛的时候实在是没有想出来有三种不同的 塔,每种塔的作用不同,怎么dp.看题解才知道,应该把 所有的红塔放到最后面,因为直线的长度是一定的,而红塔在前面不会增加后面的伤害,然后问题就是如何安排 绿塔和蓝塔,我这里d[i][j]代表前

2014多校第七场1005 || HDU 4939 Stupid Tower Defense (DP)

题目链接 题意 :长度n单位,从头走到尾,经过每个单位长度需要花费t秒,有三种塔: 红塔 :经过该塔所在单位时,每秒会受到x点伤害. 绿塔 : 经过该塔所在单位之后的每个单位长度时每秒都会经受y点伤害. 蓝塔 : 经过该塔所在单位之后,再走每个单位长度的时候时间会变成t+z. 思路 : 官方题解 : 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #define LL long long

hdu4939 Stupid Tower Defense (DP)

2014多校7 第二水的题 4939 Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 366    Accepted Submission(s): 88 Problem Description FSF is addicted to a stupid tower defense game.

hdu4939Stupid Tower Defense(DP)

题目:hdu4939Stupid Tower Defense(DP) 题目大意:保卫游戏.给出一条长度n的道路,这条道路上每个单元长度可以放一个塔.现在有三种塔:红塔:怪经过这个塔的时候受到X的伤害每秒.绿塔:怪经过这个塔之后,以后的每秒都受到Y的伤害.蓝塔:怪经过这个塔后,之后每经过单元长度的时间加长为t + Z:问怎样选择这三种塔能够使得伤害值最大. 解题思路:一开始没有想到这是DP, 看了题解才发现放塔的时候红塔应该放在最后面最优,那么就只要放蓝绿塔就行,而且前面哪个位置放了蓝绿塔对后面是

Stupid Tower Defense

题目链接 题意: 水平方向上n个1*1的格子,每个格子内部可以种一个植物,经过一个格子的时间为t.一共三种植物:R植物,经过时每秒收到r点伤害:G植物,经过后每秒受到g点伤害:B植物,经过后经过一个格子的时间加上b 2<=n<=1500,0<=r, g, b<=60000,1<=t<=3 分析: 最开始考虑的贪心:先B植物,后G植物,最后B植物,后来才发现是错误的. 首先明白,R植物对答案的影响和位置无关,而B和G植物越早种越好,所以问题就在于B和G的种法上. 状态表示

HDOJ题目4939 Stupid Tower Defense(dp)

Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1759    Accepted Submission(s): 498 Problem Description FSF is addicted to a stupid tower defense game. The goal of tower

HDU4939Stupid Tower Defense (有思想的dp)

Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1557 Accepted Submission(s): 445 Problem Description FSF is addicted to a stupid tower defense game. The goal of tower defen

HDOJ 4939 Stupid Tower Defense

red放到后面显然更优,dp[i][j]表示前i个塔里有j个blue,最后枚举有多少个red Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 599    Accepted Submission(s): 163 Problem Description FSF is addicted to