ABC 373 D求调
  • 板块题目总版
  • 楼主Treap_Kongzs
  • 当前回复5
  • 已保存回复6
  • 发布时间2024/9/28 22:01
  • 上次更新2024/9/29 12:53:14
查看原帖
ABC 373 D求调
1153677
Treap_Kongzs楼主2024/9/28 22:01

RE了19个点(

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=2e5+7;
const int maxm=2e5+7;

struct edge
{
  int to;
  int last;
  int val;
};
edge e[maxm];
int head[maxn];
int tot=0;
int dist[maxn];
int cnt[maxn];
int vis[maxn];

inline void adde(int u,int v,int w)
{
  e[++tot].to=v;
  e[tot].last=head[u];
  e[tot].val=w;
  head[u]=tot;
}

bool spfa(int n,int s)
{
  memset(dist,0x3f,sizeof(dist));
  memset(vis,0,sizeof(vis));
  queue<int> q;
  dist[s]=0;
  vis[s]=1;
  cnt[s]++;
  q.push(s);
  while(!q.empty())
  {
    int u=q.front();
    q.pop();
    vis[u]=0;
    for(int i=head[u];i!=0;i=e[i].last)
    {
      int v=e[i].to;
      if(dist[v]>dist[u]+e[i].val)
      {
        dist[v]=dist[u]+e[i].val;
        if(!vis[v])
        {
          cnt[v]++;
          if(cnt[v]>=n+1)return false;
          vis[v]=1;
          q.push(v);
        }
      }
    }
  }
  return true;
}

signed main()
{
  int n=0,m=0,u=0,v=0,w=0;
  cin>>n>>m;
  for(int i=1;i<=m;i++)
  {
    cin>>u>>v>>w;
    adde(v,u,-w);
    adde(u,v,w);
  }
  for(int i=1;i<=n;i++)
  {
    adde(0,i,0);
  }
  if(spfa(n,0)==false)
  {
    cout<<"Orz";
    return 0;
  }
  for(int i=1;i<=n;i++)
  {
    cout<<dist[i];
    if(i<n)cout<<' ';
  }
  return 0;
}
2024/9/28 22:01
加载中...