为什么我一本通上面 992ms 也会被卡,关键是时限 1000ms 。 洛谷上的题目,和一本通上的题目一模一样,除了数据范围从 1000 → 10000 。 代码见下
#include <iostream>
#include <vector>
#include <cstring>
#include <bitset>
using namespace std;
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
inline long long read(){
char ch=getchar();
long long f=1,x=0;
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*f;
}
inline void _write(long long x){
if(x>9)_write(x/10);
putchar((x%10)+'0');
}
inline void write(long long x,short f=0){
if(x<0)putchar('-'),x=-x;
_write(x);
if(f!=0)putchar(char(f));
}
const int INF=1e6+5;
class Node{
public:
int first,second;
};
int front,tail,op,n,m,a,b,c,cnt[10007],dis[10007],que[50000007],sum=0;
vector<Node>ve[10007];
string s="0";
bitset<10007>vis(s);
inline bool spfa(){
front=1;
tail=0;
for(register int i=1;i<=n;++i)
dis[i]=INF;
vis[0]=1;
que[++tail]=0;
while(front<=tail){
int u=que[front];
front++;
vis[u]=false;
for(register int j=0;j<ve[u].size();++j){
int to=ve[u][j].first;
if(dis[to]>dis[u]+ve[u][j].second){
dis[to]=dis[u]+ve[u][j].second;
cnt[to]=cnt[u]+1;
if(!vis[to]){
vis[to]=1;
que[++tail]=to;
if(cnt[to]>n+1){
return false;
}
}
}
}
}
return true;
}
int main(){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
n=read(),m=read();
for(register int i=1;i<=m;++i){
op=read(),a=read(),b=read();
if(op==1){
c=read();
ve[a].push_back(Node{b,-c});
}
else if(op==2){
c=read();
ve[b].push_back(Node{a,c});
}
else{
ve[a].push_back(Node{b,0});
ve[b].push_back(Node{a,0});
}
}
for(register int i=1;i<=n;++i)ve[0].push_back(Node{i,0});
if(!spfa()){
puts("No");
}
else{
puts("Yes");
}
return 0;
}