《算法竞赛进阶指南》------图论篇

这篇具有很好参考价值的文章主要介绍了《算法竞赛进阶指南》------图论篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0x01 Telephone Lines POJ - 3662

Telephone Lines
题意:从1到N修一条电缆,有p对电线杆之间是可以连接的,电信公司可以提供k条电缆,其他的由John提供,求john提供的电缆的最长的那根的长度(ret)。
思路:实则是求最短最长的边。
二分结果(sum)。对于 边值>sum, 电信公司需要提供电缆。
用djk 计算 1->n 路径上的最短路径。 满足d[n]< k ,sum是一个符合的结果。
代码如下:

#include<iostream>
#include<cstring>
#include<queue>
#define ll long long
#define ld long double
#define ull unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
ll gcd(ll a,ll b){ return b? gcd(b,a%b):a;}
const int N=2e4+10;
const ll P=1e9+7;
ll read(){
    ll s = 0, f = 1; char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
    return s * f;
}
using namespace std;
ll n,p,k;
ll head[N],ver[N],nex[N],edgevalue[N];
ll cnt;
void addedge(ll u,ll v,ll value)
{
    ver[++cnt]=v;
    edgevalue[cnt]=value;
    nex[cnt]=head[u];
    head[u]=cnt;
}
priority_queue<pair<int,int>> q;
ll d[N],v[N];
bool ischeck(ll sum)
{
    memset(d,0x3f,sizeof(d));
    memset(v,0,sizeof(v));
    while(!q.empty())
    {
        q.pop();
    }
    d[1]=0;
    q.push(make_pair(0,1));  //  距离  点
    while(!q.empty())
    {
        ll x=q.top().second;
        q.pop();
        if(v[x]) continue;
        v[x]=1;
        for(int i=head[x];i;i=nex[i])
        {
            int y=ver[i],z=edgevalue[i];
            if(z> sum)  z=1;
            else z=0;
            if(d[y]>d[x]+z)
            {
                 d[y]=d[x]+z;
                 q.push(make_pair(-d[y],y));
            }
        }
        if(v[n]==1) 
        break;
    }
    // printf("%lld\n",d[n]);
    // getchar();
    if(d[n]<=k) 
    return true;
    else
    return false;
}
void solve(){
    n=read();
    p=read();
    k=read();
    ll u,v,value;
    rep(i,1,p)
    {
        u=read();
        v=read();
        value=read();
        addedge(u,v,value);
        addedge(v,u,value);        
    }
    ll l=0,r=1000010;
    ll mid;
    while(l<r)
    {
        mid=(l+r)>>1;
        // printf("l:%lld r:%lld mid:%lld\n",l,r,mid);
        if(ischeck(mid))
        {
            r=mid;
        }
        else
        {
            l=mid+1;
        }
    }
    if(r==1000010) printf("-1\n");
    else
    printf("%lld\n",r);
    return ;
}
int main (){
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);
  solve();
  getchar();
  getchar();
  return 0;
}

0x02 P1073 [NOIP2009 提高组] 最优贸易

最优贸易
题意:从1到达n号,在沿途中可选一点购买水晶球,在此之后可卖出去水晶球。商人阿龙只能购买一次,
问商人阿龙 旅游结束后,通过这样的方式最多赚取多少旅费?途中 一座城市可被重复经过。
数据范围: 1 < = n < = 1 0 5 , 1 < = m < = 5 ∗ 1 0 5 1<=n<=10^5,1<=m<=5*10^5 1<=n<=105,1<=m<=5105
思路:
《算法竞赛进阶指南》------图论篇,算法,图论
代码如下:

#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define ull unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
ll gcd(ll a,ll b){ return b? gcd(b,a%b):a;}
const int N=1e6+10;
const ll P=1e9+7;
ll read(){
    ll s = 0, f = 1; char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
    return s * f;
}
using namespace std;
ll n,m;
ll vVAlue[N];
ll head[N],nex[N],ver[N];
ll cnt;
ll addedge(ll u,ll v)
{
    ver[++cnt]=v;
    nex[cnt]=head[u];
    head[u]=cnt;   
}

ll vis[N];
void djk(ll u,ll *D,ll flag)
{     
     priority_queue< pair<int,int> > q;
      
      memset(vis,0,sizeof(vis));
      if(flag==1)
       rep(i,1,n) D[i]=200;
      else
        rep(i,1,n) D[i]=0;
    //    rep(i,1,n)  cout<<D[i]<<" "; cout<<endl;
      D[u]=vVAlue[u];
      q.push(make_pair(D[u],u));
      while(!q.empty())
      {
          ll x=q.top().second;
          q.pop();
          for(int i=head[x];i;i=nex[i])
          {   
            //   cout<<"321"<<endl;
              ll y=ver[i];
              if(flag==1)
              {
                if(D[y] > D[x])
                {   
                    // cout<<vVAlue[y]<<" "<<D[x]<<endl;
                    D[y]=min(vVAlue[y],D[x]);
                    q.push(make_pair(-D[y],y));
                }
              }
              else 
              {
                  if(D[y] < D[x])
                  {   //cout<<vVAlue[y]<<" "<<D[x]<<endl;
                      D[y]=max(vVAlue[y],D[x]);
                      q.push(make_pair(D[y],y));
                  }
              }  
          }
      }
    //   cout<<flag<<endl;
    //   rep(i,1,n)
    //   {
    //       printf("u:%lld  value:%lld\n",i,D[i]);
    //   }
      return ;
}
struct zw
{
    ll x,y,z;
}a[N];
ll D[N],F[N];
void solve(){
    n=read();
    m=read();
    rep(i,1,n) vVAlue[i]=read();
    ll x,y,z;
    rep(i,1,m)
    {
        a[i].x=read();
        a[i].y=read();
        a[i].z=read();
        addedge(a[i].x,a[i].y);
        if(a[i].z==2)
        {
            addedge(a[i].y,a[i].x);
        }
    }
    djk(1,D,1);
    
    cnt=0;
    memset(head,0,sizeof(head));
    rep(i,1,m)
    {
        addedge(a[i].y,a[i].x);
        if(a[i].z==2)
        {
            addedge(a[i].x,a[i].y);
        }
    }
    djk(n,F,-1);

    ll sum=0;
    rep(i,1,n) sum=max(sum,F[i]-D[i]);
    printf("%lld\n",sum);
    return ;
}
int main (){
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);
  solve();
  getchar();
  getchar();
  return 0;
}

0x03 道路和航线 BZOJ2200

拓扑排序,djk,
道路和航线
题意:
《算法竞赛进阶指南》------图论篇,算法,图论思路:
《算法竞赛进阶指南》------图论篇,算法,图论
代码如下:

#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define ull unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
ll gcd(ll a,ll b){ return b? gcd(b,a%b):a;}
const int N=2e5+10;
// const ll P=1e9+7;
ll read(){
    ll s = 0, f = 1; char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
    return s * f;
}
using namespace std;
ll n,R,P,S;
ll  cnt;
ll head[N],nex[N],edgevalue[N],var[N];
ll D[N],vis[N];
ll num[N],in[N];
ll ans;   // 编号个数
queue<int> c;  //存放编号
priority_queue< pair<ll,int>> q;
void addedge(ll u,ll v,ll value)
{
    var[++cnt]=v;
    edgevalue[cnt]=value;
    nex[cnt]=head[u];
    head[u]=cnt;
}
void dfs(ll u)
{   
    num[u]=ans;
    for(int i=head[u];i;i=nex[i])
    {
        int v=var[i];
        if(num[v]) continue;
        dfs(v);
    }
    return ;
}
void  djk(ll s)
{     
      ll u,v,value;
      memset(D,0x7f,sizeof(D));
      memset(vis,0,sizeof(vis));
      D[s]=0;
      c.push(num[s]);
      rep(i,1,ans)
      {
          if(in[i]==0 and num[s]!=i)
          c.push(i);
      }
      while(!c.empty())
      {
          ll x=c.front();
          c.pop();
          rep(i,1,n)
          {
              if(num[i]==x) q.push(make_pair(-D[i],i));
          }
          while(!q.empty())
          {
              u=q.top().second;
              q.pop();
              if(vis[u])  continue;
              vis[u]=1;
              for(int i=head[u];i;i=nex[i])
              {
                  v=var[i];
                  value=edgevalue[i];
                  if(D[v] > D[u]+value)
                  {
                      D[v]=D[u]+value;
                      if(num[u]==num[v])
                      {
                          q.push(make_pair(-D[v],v));
                      }
                  }
                  if(num[u]!=num[v])
                  {   
                      in[num[v]]--;
                      if(in[num[v]]==0)
                      {
                          c.push(num[v]);
                      }
                  } 
              }
          }
      }
}
void solve(){
    n=read();
    R=read();
    P=read();
    S=read();
    ll u,v,value;
    rep(i,1,R)
    {
        u=read(); v=read(); value=read();
        addedge(u,v,value);
        addedge(v,u,value);
    }
    rep(i,1,n)
    {
        if(num[i]==0)
        {
            ans++;
            dfs(i);
        }
    }
    rep(i,1,P)
    {
        u=read();
        v=read();
        value=read();
        in[num[v]]++;
        addedge(u,v,value);
    }
    djk(S);
    rep(i,1,n)
    {
        if(D[i]>0x3f3f3f3f) printf("NO PATH\n");
        else printf("%lld\n",D[i]);
    }
    return ;
}
int main (){
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);
  solve();
  getchar();
  getchar();
  return 0;
}

0x04 Sorting It All Out POJ - 1094 topo

Sorting It All Out
题意:
《算法竞赛进阶指南》------图论篇,算法,图论
思路:
《算法竞赛进阶指南》------图论篇,算法,图论
代码如下:

#include<iostream>
#include<cstring>
#include<queue>
#define ll long long
#define ld long double
#define ull unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
ll gcd(ll a,ll b){ return b? gcd(b,a%b):a;}
const int N=30;
const ll P=1e9+7;
ll read(){
    ll s = 0, f = 1; char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
    return s * f;
}
using namespace std;
ll n,m,cnt;
ll in[N],in1[N];
ll head[N],var[1000],nex[1000];
void addedge(ll u,ll v)
{
    var[++cnt]=v;
    nex[cnt]=head[u];
    head[u]=cnt;
}
ll ans=0;
char ch[N];
ll topo()
{
    rep(i,0,n-1) in[i]=in1[i];
    ans=0;
    queue<int> q;
    rep(i,0,n-1)
    {
        if(in[i]==0)  q.push(i);
    }
    bool logo=true;
    ll u,v;
    while(!q.empty())
    {
        if(q.size()>1) logo=false;
        ll u=q.front();
        ch[ans++]=u;
        q.pop();
        for(int i=head[u];i;i=nex[i])
        {
            v=var[i];
            if((--in[v])==0) q.push(v);
        } 
    }
    // cout<<ans<<" "<<logo<<n<<endl;
    if(ans<n) return -1;
    else 
    {
        if(logo==true) return 1;
        else return 0;
    }
}
void solve(){
    while(1)
    {
        n=read();
        m=read();
        if(n==0 and m==0) break;
        rep(i,0,n)
        {
            in1[i]=0;
            head[i]=0;
            cnt=0;
        }
        char x,y;
        ll u,v;
        ll res=0;
        ll inde=0;
        rep(i,1,m)
        {
            cin>>x>>y>>y;
            u=x-'A';
            v=y-'A';
            addedge(u,v);
            in1[v]++;
            if(res==0)
            {
                res=topo();
                // cout<<res<<endl;
                inde=i;
            } 
        }
        // cout<<res<<endl;
        if(res==0) cout<<"Sorted sequence cannot be determined."<<endl;
        else if(res==-1) cout<<"Inconsistency found after "<<inde<<" relations."<<endl;
        else if(res==1) 
        {
            cout<<"Sorted sequence determined after "<<inde<<" relations: ";
            rep(i,0,ans-1)  printf("%c",ch[i]+'A');
            cout<<"."<<endl;
        }
    }
}
int main (){
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);
  solve();
  getchar();
  getchar();
  return 0;
}

0x05 Sightseeing trip POJ - 1734 最小环问题

留下一个小疑问点: int 和 ll a=0x3f3f3f3f 在这道题中 使用ll a=0x3f3f3f3f 会错。
Sightseeing trip
题意:
《算法竞赛进阶指南》------图论篇,算法,图论
思路:弗洛伊德, 回溯路径。
外层循环k开始,对所以的路径刷新,添上k和步添上k
这个算法的思想很关键
《算法竞赛进阶指南》------图论篇,算法,图论

《算法竞赛进阶指南》------图论篇,算法,图论

#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
const int N=300+10;
using namespace std;
int a[N][N],dist[N][N],pos[N][N];
ll n,m;
ll ans=1e8;
vector<int> path;
void get_path(int x,int y){
    if(pos[x][y]==0) return ;
    get_path(x,pos[x][y]);
    path.push_back(pos[x][y]);
    get_path(pos[x][y],y);
}
void solve(){
    cin>>n>>m;
    //  memset(a,0x3f,sizeof(a));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            a[i][j]=1e8;
        }
    }
    for(int i=0;i<=n;i++) a[i][i]=0;
    for(int i=1;i<=m;i++)
    {   
        int u,v,w;
        cin>>u>>v>>w;
        a[u][v]=a[v][u]=min(a[u][v],w);
    }
    memcpy(dist,a,sizeof(a));
    for(int k=1;k<=n;k++){
        for(int i=1;i<k;i++){
            for(int j=i+1;j<k;j++){
                if(dist[i][j]+a[j][k]+a[k][i]<ans){
                    ans=dist[i][j]+a[j][k]+a[k][i];
                    path.clear();
                    path.push_back(i);
                    get_path(i,j);
                    path.push_back(j);
                    path.push_back(k);
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(dist[i][j]> dist[i][k]+dist[k][j]){
                    dist[i][j]=dist[i][k]+dist[k][j];
                    pos[i][j]=k;
                }
            }
        }
    }
    if(ans == 1e8){
         cout << "No solution." << endl;
    }
    else 
    {
        for(int i=0;i<(int)path.size();i++){
            cout<<path[i]<<" ";
        }
    }
    return ;
}
int main (){
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);
  solve();
  getchar();
  getchar();
  return 0;
}

0x06 Cow Relays POJ - 3613 S到E经过k条边的最短路

传送门
题意:
《算法竞赛进阶指南》------图论篇,算法,图论
思路: 点编号映射,矩阵快速幂
代码如下:

#include<iostream>
#include<cstring>
#define ll long long
#define ld long double
#define ull unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
ll gcd(ll a,ll b){ return b? gcd(b,a%b):a;}
const int N=2e5+10;
const ll P=1e9+7;
const ll INF=0x3f3f3f3f;
ll read(){
    ll s = 0, f = 1; char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
    return s * f;
}
using namespace std;
ll  p[1010];
ll  a[300];
ll cnt;
struct M{
    ll edge[210][210];
    void init(){
        rep(i,1,200){
            rep(j,1,200){
                edge[i][j]=INF;                
            }
        }
    }
};
M add(M a,M b){
    M sum;
    sum.init();
    rep(i,1,cnt){
        rep(j,1,cnt){
            rep(k,1,cnt){
                sum.edge[i][j]=min(sum.edge[i][j],a.edge[i][k]+b.edge[k][j]);
            }
        }
    }
    return sum;
}
void solve(){
    ll n,t,s,e;
    cin>>n>>t>>s>>e;
    ll w,u,v;
    M sum;
    sum.init();
    for(int i=1;i<=t;i++){
        cin>>w>>u>>v;
        if(!p[u]){
            p[u]=(++cnt);
            a[cnt]=u;
        }
        if(!p[v]){
            p[v]=(++cnt);
            a[cnt]=v;
        }
        sum.edge[p[u]][p[v]]=min(w, sum.edge[p[u]][p[v]]);
        sum.edge[p[v]][p[u]]=min(w, sum.edge[p[v]][p[u]]);
    }
    M ans;
    memcpy(ans.edge,sum.edge,sizeof(sum.edge));
    // sum=add(sum,sum);
    n--;
    while(n){
        if(n&1) ans=add(ans,sum);
        sum=add(sum,sum);
        n>>=1;
    }
    cout<<ans.edge[p[s]][p[e]]<<endl;
}
int main (){
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);
  solve();
  getchar();
  getchar();
  return 0;
}

0x07 走廊泼水节 (Kruskal)

走廊泼水节
题意:
《算法竞赛进阶指南》------图论篇,算法,图论
思路: 克里斯特+模拟
《算法竞赛进阶指南》------图论篇,算法,图论文章来源地址https://www.toymoban.com/news/detail-768484.html

#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define ull unsigned long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
ll gcd(ll a,ll b){ return b? gcd(b,a%b):a;}
const int N=1e4+10;
const ll P=1e9+7;
ll read(){
    ll s = 0, f = 1; char ch = getchar();
    while(!isdigit(ch)){
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(isdigit(ch)) s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
    return s * f;
}
using namespace std;
ll fa[N];
ll num[N];
ll  getfa(ll x){
  return x==fa[x] ? x: fa[x]=getfa(fa[x]);
}
struct zw{
    int x,y,z;
}a[N];
bool operator <(zw a,zw b){
  return a.z<b.z;
}
void solve(){
      ll n;
      cin>>n;
      rep(i,1,n-1){
         cin>>a[i].x>>a[i].y>>a[i].z;
      }
      rep(i,1,n){
        fa[i]=i;
        num[i]=1;
      }
      sort(a+1,a+n);
      ll sum=0;
      for(int i=1;i<=n-1;i++){
        int x=getfa(a[i].x);
        int y=getfa(a[i].y);
        if(x==y) continue;
        sum+=( num[x]*num[y]-1 )*(a[i].z+1);
        fa[y]=x;
        num[x]+=num[y];
      }
      cout<<sum<<endl;
      return ;
}
int main (){
  //freopen("in.txt","r",stdin);
  //freopen("out.txt","w",stdout);
  int T=read();
  while(T--)
  solve();
  getchar();
  getchar();
  return 0;
}

到了这里,关于《算法竞赛进阶指南》------图论篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《算法竞赛进阶指南》0x62 最小生成树

    题意: 给定一棵树,将这棵树加边,扩充为完全图,使完全图的最小生成树为原来的树,询问增加的边权值总和最小是多少 解析: 考虑 kruskal 产生最小生成树的过程:选择当前连接两个连通块边权最小的边。 所以,对于最小生成树上的边,该边一定是两个连通块之间唯一的

    2024年02月06日
    浏览(38)
  • 【C++算法竞赛 · 图论】图论基础

    前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类: 按边的类型分类: 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 图论(Graph theory) ,是 OI 中的一样很大的一个模块,围绕它有很多高难度的算法以及高级的概念。 这篇文章将介绍关

    2024年04月12日
    浏览(42)
  • 算法竞赛备赛之搜索与图论训练提升,暑期集训营培训

    目录 1.DFS和BFS 1.1.DFS深度优先搜索 1.2.BFS广度优先搜索 2.树与图的遍历:拓扑排序 3.最短路  3.1.迪杰斯特拉算法 3.2.贝尔曼算法 3.3.SPFA算法 3.4.多源汇最短路Floy算法 4.最小生成树 4.1.普利姆算法 4.2.克鲁斯卡尔算法 5.二分图:染色法,匈牙利算法 5.1.染色法 5.2.匈牙利算法 深度优

    2024年02月13日
    浏览(35)
  • ⌈算法进阶⌋图论::并查集——快速理解到熟练运用

    目录  一、原理 1. 初始化Init   2. 查询 find  3. 合并 union 二、代码模板 三、练习 1、  990.等式方程的可满足性🟢 2、  1061. 按字典序排列最小的等效字符串🟢 3、721.账户合并 🟡 4、  839.相似字符串组🟡 5、  2812.找出最安全路径 🔴 并查集主要运用与求一些 不相交且有关

    2024年02月13日
    浏览(35)
  • 算法竞赛备赛进阶之数位DP训练

    数位DP的思想就是对每一位进行DP,计算时记忆化每一位可以有的状态,其作用是减少运算时间,避免重复计算。 数位DP是一种计数用的DP,一般就是要统计一个区间[A,B]内满足一些条件数的个数。 以1e9甚至1e18、1e100的问题为例,因为在统计情况下有很多重复的计算,数位DP实

    2024年01月16日
    浏览(49)
  • ⌈算法进阶⌋图论::拓扑排序(Topological Sorting)——快速理解到熟练运用

    目录  一、原理 1. 引例:207.课程表  2. 应用场景 3. 代码思路 二、代码模板 三、练习 1、210.课程表Ⅱ🟢 2、2392.给定条件下构造举证🟡 3、310.最小高度树🟡 4、 2603.收集树中金币 🔴 1. 引例:207.课程表 就如大学课程安排一样,如果要学习数据结构与算法、机器学习这类课程

    2024年02月11日
    浏览(48)
  • 算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)

    为什么突然想学算法了? 用较为“官方”的语言讲 ,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 但从实际而言 ,是因为当

    2023年04月15日
    浏览(45)
  • 算法竞赛入门【码蹄集进阶塔335题】(MT2291-2295)

    为什么突然想学算法了? 用较为“官方”的语言讲 ,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 但从实际而言 ,是因为当

    2024年02月06日
    浏览(32)
  • 算法竞赛入门【码蹄集进阶塔335题】(MT2126-2150)

    为什么突然想学算法了? 用较为“官方”的语言讲 ,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 但从实际而言 ,是因为当

    2023年04月19日
    浏览(39)
  • 算法竞赛入门【码蹄集进阶塔335题】(MT2271-2275)

    为什么突然想学算法了? 用较为“官方”的语言讲 ,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。 但从实际而言 ,是因为当

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包