Test

Posted scott527407973

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Test相关的知识,希望对你有一定的参考价值。

#include <bits/stdc++.h>

using namespace std;
const int inf=0x3f3f3f3f;
const int MAXN=10000;
const int MAXM=100000;
struct Edge

    int to,nxt,cap,flow;
edge[MAXM];
int head[MAXN],tot,dis[MAXN],S,T,n,m;
void init()

    memset(head,-1,sizeof(head));
    tot=0;

void addedge(int u,int v,int cap)

    edge[tot].to=v; edge[tot].cap=cap;  edge[tot].flow=0;
    edge[tot].nxt=head[u];  head[u]=tot++;

    edge[tot].to=u; edge[tot].cap=0;  edge[tot].flow=0;
    edge[tot].nxt=head[v];  head[v]=tot++;

queue<int>q;
bool bfs()

    memset(dis,0,sizeof(dis));
    while(!q.empty())   q.pop();
    q.push(S);
    dis[S]=1;
    while(!q.empty())
    
        int u=q.front();q.pop();
        for(int i=head[u];i!=-1;i=edge[i].nxt)
        
            int v=edge[i].to;
            if(!dis[v]&&edge[i].cap>edge[i].flow)
            
                dis[v]=dis[u]+1;
                q.push(v);
            
        
    
    return dis[T];

int dfs(int u,int f)

    if(u==T)    return f;
    for(int i=head[u];i!=-1;i=edge[i].nxt)
    
        int v=edge[i].to;
        if(dis[u]+1==dis[v]&&edge[i].cap>edge[i].flow)
        
            int f1=dfs(v,min(f,edge[i].cap-edge[i].flow));
            if(f1)
            
                edge[i].flow+=f1;
                edge[i^1].flow-=f1;
                return f1;
            
        
    
    return 0;

int dinic()

    int ans=0;
    while(bfs())    ans+=dfs(S,inf);
    return ans;

int to[MAXN];
bool vis[MAXN];
int main()

    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin>>n>>m;
    init();
    S=0;
    T=2*n+1;
    int u,v;
    for(int i=1;i<=m;i++)
    
        cin>>u>>v;
        addedge(u,v+n,1);
    
    for(int i=1;i<=n;i++)
    
        addedge(S,i,1);
        addedge(i+n,T,1);
    
    int ans=n-dinic();
    for(int i=1;i<=n;i++)
    
        for(int j=head[i];j!=-1;j=edge[j].nxt)
        
            if(edge[j].flow==1)
            
                to[i]=edge[j].to-n;
                break;
            
        
    
    for(int i=1;i<=n;i++)
    
        int flag=0;
        if(!vis[i])
        
            while(i)
            
                vis[i]=1;
                if(flag)    cout<<" ";
                flag=1;
                cout<<i;
                i=to[i];
            
            cout<<endl;
        
    
    cout<<ans<<endl;
    return 0;

以上是关于Test的主要内容,如果未能解决你的问题,请参考以下文章

请教shell脚本处理带空格的文件名

python argparse中的多个参数

call和apply的使用

textarea 删除白线?

在MySql中、怎样根据年份或者月份查询数据表中的数据?

linux 文件操作命令 touchcatmorelessheadtail