CF 261 E. Pashmak and Graph

点击打开链接

CF的题特别考想法,然后就是脑速和手速。

这道题目想法不难,把边排个序,近似于一轮轮往上加,因为是单向的,u--->v,

F(V) = MAX(F(V) ,  F(U)+1);注意有个延迟性问题,要保存在临时变量里,在这一轮结束后,才更改值,即temp(V) = MAX(temp(V) ,  F(U)+1);         在结束后

 F(V) = temp(V); 因为马上改会影响到 F(U)


这题WA了,找了半天才找到错误



//#define LOCAL
#include <cstdio>
#include <cstring>
#include <vector>
#include <iostream>
#include <cmath>
#include <algorithm>


using namespace std;
struct edge
{
    int u, v, value;
}a[300005];
bool cmp(edge a, edge b)
{
    return a.value < b.value;
}


int maxn;
int b[300005], c[300005];


int temp[300005];
int tot;
int n, m;
int main()
{
//#ifdef LOCAL
   // freopen("in.txt", "r", stdin);
   // freopen("output.txt", "w", stdout);
//#endif
    scanf("%d %d", &n, &m);
    for (int i=1; i<=m; i++)
    {
        scanf("%d %d %d", &a[i].u, &a[i].v, &a[i].value);
    }
    sort(a+1, a+m+1, cmp);
    memset(b, 0, sizeof (int)*(n+3));
    memset(c, 0, sizeof (int)*(n+3));


    tot = 0;
    a[0].value = 0;


    for (int i=1; i<=m; i++)
    {
        if (a[i].value > a[i-1].value)
        {
            for (int j=0; j<tot; j++)
            {
                int k = temp[j];
                b[k] = c[k];
<span style="white-space:pre">		</span>//c[k] = 0; 因为一个v ,可能多次进行修改,这样就把后面更改给抹杀了,还把原值都弄没了
            }
            tot = 0;
        }


        if ((b[a[i].v] < (b[a[i].u]+1))&&(c[a[i].v] < (b[a[i].u]+1)))
        {
            temp[tot++] = a[i].v;
            c[a[i].v] = b[a[i].u]+1;
        }
    }
    for (int j=0; j<tot; j++)
    {
        int k = temp[j];
        b[k] = c[k];
    }
    maxn = 0;
    for (int i=1; i<=n ;i++)
    {
        maxn = max(maxn, b[i]);
    }
    printf("%d\n", maxn);


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值