首页 > 其他分享 >2236. 伊基的故事 I - 道路重建

2236. 伊基的故事 I - 道路重建

时间:2025-01-10 20:43:47浏览次数:1  
标签:return 伊基 int flow pos 2236 dep frz 重建

#ifdef ONLINE_JUDGE 
#else 
#define Qiu_Cheng 
#endif 
#include <bits/stdc++.h> 
#define int long long 
using namespace std; 
// typedef long long ll; 
const int N=1e5+5,mod=1e9+7,inf=INT_MAX; 
// const int mod1=469762049,mod2=998244353,mod3=1004535809;
// const int G=3,Gi=332748118; 
// const int M=mod1*mod2;
inline int read()
{
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9'){if(c=='-'){f=-1;}c=getchar();}
    while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c-'0');c=getchar();}
    return x*f;
}
inline void write(int x)
{
    if(x<0){putchar('-');x=-x;}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
int n,m;
struct node{int to,c,lp;};
vector<node>g[N];
int dep[N],pos[N];
void add(int from,int to,int c)
{
    g[from].push_back((node){to,c,(int)g[to].size()});
    g[to].push_back((node){from,0,(int)g[from].size()-1});
}
void fc(int s)
{
    memset(dep,-1,sizeof(dep));
    dep[s]=0;
    queue<int>q;
    q.push(s);
    while(!q.empty())
    {
        int u=q.front();q.pop();
        for(auto v:g[u])
        {
            if(v.c>0&&dep[v.to]==-1)
            {
                dep[v.to]=dep[u]+1;
                q.push(v.to);
            }
        }
    }
}
int dfs(int u,int t,int f)
{
    if(u==t||!f) return f;
    int ans=0;
    for(int &i=pos[u];i<g[u].size();i++)
    {
        auto &x=g[u][i];
        if(x.c>0&&dep[x.to]==dep[u]+1)
        {
            int frz=dfs(x.to,t,min(f,x.c));
            if(frz>0)
            {
                x.c-=frz;g[x.to][x.lp].c+=frz;
                ans+=frz;f-=frz;
                if(!f) break;
            }
        }
    }
    return ans;
}
int max_flow=0;
int dinic(int s,int t)
{
    int flow=0;
    while(1)
    {
        fc(s);
        if(dep[t]==-1) return flow;
        memset(pos,0,sizeof(pos));
        flow+=dfs(s,t,inf);
    }
}
int S,T;
vector<node>G[N];


void fc2(int s)
{
    memset(dep,-1,sizeof(dep));
    dep[s]=0;
    queue<int>q;
    q.push(s);
    while(!q.empty())
    {
        int u=q.front();q.pop();
        for(auto v:G[u])
        {
            if(v.c>0&&dep[v.to]==-1)
            {
                dep[v.to]=dep[u]+1;
                q.push(v.to);
            }
        }
    }
}
int dfs2(int u,int t,int f)
{
    if(u==t||!f) return f;
    int ans=0;
    for(int &i=pos[u];i<G[u].size();i++)
    {
        auto &x=G[u][i];
        if(x.c>0&&dep[x.to]==dep[u]+1)
        {
            int frz=dfs2(x.to,t,min(f,x.c));
            if(frz>0)
            {
                x.c-=frz;G[x.to][x.lp].c+=frz;
                ans+=frz;f-=frz;
                if(!f) break;
            }
        }
    }
    return ans;
}
int dinic2(int s,int t)
{
    int flow=0;
    while(1)
    {
        fc2(s);
        if(dep[t]==-1) return flow;
        memset(pos,0,sizeof(pos));
        flow+=dfs2(s,t,inf);
    }
}





int c[N],a[N],b[N];
inline void solve()
{
    cin>>n>>m;
    S=0,T=n-1;
    for(int i=1;i<=m;i++)
    {
        int x,y,z;cin>>x>>y>>z;
        a[i]=x,b[i]=y;
        c[i]=g[x].size();
        add(x,y,z);
    }
    int zky=dinic(S,T);
    for(int i=1;i<=m;i++)
    {
        if(g[a[i]][c[i]].c!=0) continue;
        else
        {
            for(int j=0;j<=n-1;j++)G[j].clear();
            for(int j=0;j<=n-1;j++)
                for(int k=0;k<g[j].size();k++) 
                {
                    // cout<<"ffffffffffff"<<endl;
                    G[j].push_back(g[j][k]);
                }

            // for(int j=0;j<=n-1;j++)
            //     for(int k=0;k<g[j].size();k++) 
            //     {
            //         cout<<G[j][k].c<<" "<<G[j][k].to<<" "<<G[j][k].lp<<endl;
                    
                    
            //     }
            G[a[i]][c[i]].c+=1;
            int fuck=dinic2(S,T);
            if(fuck>0) max_flow++;
        }
    }
    cout<<max_flow<<endl;
}
signed main() 
{ 
#ifdef Qiu_Cheng 
    freopen("1.in","r",stdin); 
    freopen("1.out","w",stdout); 
#endif 
    // ios::sync_with_stdio(false); 
    // cin.tie(0); cout.tie(0); 
    // int QwQ; 
    // cin>>QwQ; 
    // while(QwQ--)solve(); 
    solve(); 
    return 0; 
}
//12 825076913 0 173167432
//  6666   66666  666666 
// 6    6  6   6      6 
// 6    6  6666      6 
// 6    6  6  6    6 
//  6666   6   6  6666666

//g++ -O2 -std=c++14 -Wall "-Wl,--stack= 536870912 " cao.cpp -o cao.exe

标签:return,伊基,int,flow,pos,2236,dep,frz,重建
From: https://www.cnblogs.com/qc0817/p/18664682

相关文章

  • OpenCV相机标定与3D重建(53)解决 Perspective-3-Point (P3P) 问题函数solveP3P()的使
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述根据3个3D-2D点对应关系找到物体的姿态。cv::solveP3P是OpenCV中的一个函数,用于解决Perspective-3-Point(P3P)问题。该问题的目标是根据给定的三个空间点(世界坐标系中......
  • 【代码随想录】刷题记录(91)-根据身高重建队列
    题目描述:假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i]=[hi,ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的......
  • 3D视觉工坊 | UC伯克利重磅开源HSfM:联合估计3D重建、相机位姿、3D人体姿态!
    本文来源公众号“3D视觉工坊”,仅用于学术分享,侵权删,干货满满。原文链接:UC伯克利重磅开源HSfM:联合估计3D重建、相机位姿、3D人体姿态!0.论文信息标题:ReconstructingPeople,Places,andCameras作者:LeaMüller,HongsukChoi,AnthonyZhang,BrentYi,JitendraMalik,A......
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之16 再次重建
    再一次GPT丢失了项目,再次重建同名项目。并以上一次项目(“方案再探”之1~6)的项目附件及全部沟通内容整理出来的文件作为项目附件开始这一轮的讨论本文问题检查我提供的项目文档中前后不一字的地方,并在完全理解项目意图的基础上写出完整包含前述项目文档及讨论中澄清的问......
  • 代码随想录算法训练营第二十九天|134加油站、135分发糖果、860柠檬水找零、406根据身
    day29贪心算法part031.134加油站解题思路:(1)总体条件判断:如果gas数组的总和小于cost数组的总和,则无论从哪个加油站出发,汽油都不足以完成一圈,返回-1。(2)寻找起点:设定两个变量:total_tank:总剩余汽油量,表示从头到尾累计整个数组的油量差,目的是判断总的油量......
  • 当我怀疑一切时(如何重建内心的秩序)
    from:AI  当我性疑一切时该怎么办?当怀疑的阴霾笼罩生活,内心仿佛陷入了无尽的迷雾,一切都变得不确定。我们开始质疑自己的选择,身边的人,乃至整个世界的真实性与可靠性。这种新动态会让我们感到迷茫,焦虑与不安,但安也可是我们重新审视生活,探索自我的契机。首先,要坦然拉纳怀疑的......
  • Oracle数据库循环重建多个物化视图shell脚本
    #!/bin/bash#设置数据库连接信息DB_HOST="LOCALHOST"DB_PORT="1521"DB_SID="pdb"DB_USER="mics"DB_PASS="GZL11mics"TNS_SERVICE="${DB_SID}"START_TIME=$(date+"%Y-%m-%d%H:%M:%S")echo"开......
  • 【题解】洛谷P4198 楼房重建
    因为有个bool调了一个小时,汤碗里。题解显然能看到是斜率的问题,后面的斜率要严格大于前面的斜率才能够看见,所以这就是最大严格前缀长度问题。有修改考虑线段树维护,信息合并时并不能直接合并,左部分可以直接合并,但右部分不能超过左部分的斜率最大值,所以我们用函数递归右区间判断,如......
  • 【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化
    Introduction在计算机视觉三维重建中,求解3D场景的表示和定位给定的相机帧的相机位姿是两个非常重要的任务,这两个问题互为依赖,一方面,恢复3D场景的表示需要使用已知的相机位姿进行观察;另一方面,定位相机需要来自特征点的可靠对应。错误的相机位姿会对重建的输出和性能产生一系列负......
  • 代码随想录算法训练营第二十九天| leetcode134. 加油站、leetcode135.分发糖果、leetc
    1leetcode134.加油站题目链接:134.加油站-力扣(LeetCode)文章链接:代码随想录视频链接:贪心算法,得这么加油才能跑完全程!LeetCode:134.加油站_哔哩哔哩_bilibili思路:其实这道题我有思路了,但是不知道怎么写,感觉太暴力了,就是找到花费最小的那个位置且汽油足够往下走的地方,开始走,......