QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#419659 | #1252. Floyd-Warshall | DaiRuiChen007 | RE | 0ms | 0kb | C++14 | 1.8kb | 2024-05-24 08:24:25 | 2024-05-24 08:24:26 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2005;
struct Edge { int v,w; };
vector <Edge> G[MAXN];
bool vis[MAXN];
int n,m,dis[MAXN],ans=0,ord[MAXN],deg[MAXN];
vector <int> f[MAXN];
priority_queue <array<int,2>,vector<array<int,2>>,greater<array<int,2>>> q;
void build(int s) {
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis)),dis[s]=0;
q.push({0,s});
while(q.size()) {
int u=q.top()[1]; q.pop();
if(vis[u]) continue;
vis[u]=true;
for(auto e:G[u]) if(dis[e.v]>dis[u]+e.w) {
q.push({dis[e.v]=dis[u]+e.w,e.v});
}
}
memset(deg,0,sizeof(deg));
memset(ord,0,sizeof(ord));
for(int u=1;u<=n;++u) {
f[u].clear();
for(auto e:G[u]) if(dis[e.v]==dis[u]+e.w) {
f[u].push_back(e.v),++deg[e.v];
}
}
queue <int> Q;
for(int i=1;i<=n;++i) if(!deg[i]) Q.push(i);
for(int i=1;i<=n;++i) {
int u=ord[i]=Q.front(); Q.pop();
for(int v:f[u]) if(!--deg[v]) Q.push(v);
}
}
bitset <MAXN> g[MAXN],ge[MAXN],suf[MAXN],tmp;
bool mk[MAXN];
signed main() {
freopen("floyd.in","r",stdin);
freopen("floyd.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) for(int j=i;j<=n;++j) ge[i][j]=1;
for(int i=1,u,v,w;i<=m;++i) scanf("%d%d%d",&u,&v,&w),G[u].push_back({v,w});
for(int s=1;s<=n;++s) {
memset(mk,0,sizeof(mk));
build(s);
for(int i=n;i>=1;--i) {
int u=ord[i]; suf[u].reset(),suf[u][u]=1;
for(int j:f[u]) suf[u]|=suf[j];
}
g[s][s]=1;
for(int i:f[s]) {
g[s][i]=1;
for(int j:f[i]) g[s][j]=1;
}
for(int i:f[s]) if(i<s) tmp=g[i],tmp&=suf[i],g[s]|=tmp,mk[i]=1;
for(int i=1;i<s;++i) {
if(g[s][i]) {
if(!mk[i]) tmp=g[i],tmp&=suf[i],tmp&=ge[i],g[s]|=tmp;
} else if(vis[i]) ++ans;
}
for(int i=s+1;i<=n;++i) {
if(g[s][i]) {
for(int j:f[i]) if(j>i) g[s][j]=1;
} else if(vis[i]) ++ans;
}
}
printf("%d\n",ans);
return 0;
}
详细
Test #1:
score: 0
Dangerous Syscalls
input:
4 5 2 3 4 3 4 3 4 2 2 1 3 1 1 2 9