HDU3605 Escape(最大流判满流 + 状压)

本文介绍了一种结合状压DP与最大流算法解决人员转移问题的方法。面对大规模数据,通过状态压缩减少边的数量,避免TLE。利用超级源点与超级汇点构建图模型,实现高效求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题意】:

有N个人,M个星球,给N*M矩阵,(i, j)为1代表i可以到j星球,0代表不能,问是否能把所有人转移走。

【思路】:

N的范围为1e6,如果让每个人与星球连边一定TLE,再根据矩阵每一行只有0,1可以进行状压,把相同状态idx的人合并到数组siz[idx],

在扫描状态,与符合条件的星球连边。

【建图】:

超级源点sp -> idx  边权siz[idx]

idx -> M  边权inf

M -> 超级汇点tp  边权为容量

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 5;
const int maxm = 10 + 5;
const int inf = 0x3f3f3f3f;
int n, m, d[maxn+maxm], siz[maxn];
int head[maxn+maxm], tot, maxflow;
int sp, tp;
struct edge{
    int to, w, next;
} ed[(maxn*maxm+maxn+maxm)<<1];
inline void init(){
    memset( head ,-1, sizeof(head) );
    memset( siz, 0, sizeof(siz) );
    tot = 1;
}

inline void add( int u, int v, int w ){
    ed[++tot].to = v; ed[tot].w = w; ed[tot].next = head[u]; head[u] = tot;
    ed[++tot].to = u; ed[tot].w = 0; ed[tot].next = head[v]; head[v] = tot;
}

inline bool bfs(){
    memset( d, 0, sizeof(d) );
    queue<int> q;
    d[sp] = 1;
    q.push(sp);
    while( !q.empty() ){
        int x = q.front();
        q.pop();
        for( int i=head[x]; i!=-1; i=ed[i].next ){
            int y = ed[i].to;
            if( ed[i].w && !d[y] ){
                d[y] = d[x] + 1;
                q.push(y);
                if( y==tp ) return 1;
            }
        }
    }
    return 0;
}

inline int dfs( int x, int flow ){
    if( x==tp ) return flow;
    int res = flow, k;
    for( int i=head[x]; i!=-1 && res; i=ed[i].next ){
        int y = ed[i].to;
        if( ed[i].w && d[y]==d[x]+1 ){
            k = dfs( y, min( ed[i].w, res ) );
            if(!k) d[y] = 0;
            ed[i].w -= k;
            ed[i^1].w += k;
            res -= k;
        }
    }
    return flow-res;
}

inline void dinic(){
    int flow = maxflow = 0;
    while( bfs() )
        while( flow=dfs(sp, inf) ) maxflow += flow;
}

int main(){
    // freopen("in.txt", "r", stdin);
    while( ~scanf("%d%d", &n, &m) ){
        init();
        int l = inf, r = -inf;
        for( int i=1; i<=n; i++ ){
            int sum = 0;
            for( int j=1; j<=m; j++ ){
                int tmp;
                scanf("%d", &tmp);
                sum <<= 1;
                sum += tmp;
            }
            siz[sum] ++;
            l = min( l, sum ); r = max( r, sum );
        }
        sp = 0;
        tp = r+m+1;
        for( int i=1; i<=m; i++ ){
            int cont;
            scanf("%d", &cont);
            add( i+r, tp, cont );
        }
        for( int i=l; i<=r; i++ )
            if( siz[i] ){
                int pos = 0;
                while( pos<m ){
                    if( i&(1<<pos) ) add( i, m-pos+r, inf );
                    pos ++;
                }
                add( sp, i, siz[i] );
            }
        dinic();
        if( n<=maxflow ) puts("YES");
        else puts("NO");
    }

    return 0;
}

 

转载于:https://www.cnblogs.com/WAautomaton/p/11031958.html

内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值