c++里面的duration_cast可以实现记录运行时所用的时间,但是这个代码
#include<bits/stdc++.h>
using namespace std;
using namespace std::chrono;
int n,m,s;
vector<int>e[100005];
set<pair<int,int>>flag;
int ind[100005];
int a[100005];
queue<int>q;
double ans[100005];
vector<int>qwq;
int main()
{
auto beg = high_resolution_clock::now();
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m>>s;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
if(u==v)
continue;
if(flag.find(make_pair(u,v))!=flag.end())
continue;
flag.insert({u,v});
e[u].push_back(v);
ind[v]++;
}
for(int i=1;i<=n;i++)
if(ind[i]==0)
q.push(i);
while(!q.empty())
{
int u=q.front();
q.pop();
qwq.push_back(u);
for(int v:e[u])
{
ind[v]--;
if(ind[v]==0)
q.push(v);
}
}
if(qwq.size()!=n)
{
cout<<"NO";
return 0;
}
for(int i=1;i<=n;i++)
ans[i]=0;
ans[s]=1;
for(int i=0;i<qwq.size();i++)
{
int u=qwq[i];
int out=e[u].size();
if(a[u]==0)
continue;
if(out>0)
for(int v:e[u])
ans[v]+=ans[u]/out;
}
double Ans=0;
for(int i=1;i<=n;i++)
if(a[i]==0)
Ans+=ans[i];
auto end=high_resolution_clock::now();
if(duration_cast<milliseconds>(end-beg).count()>150)
{
cout<<"NO";
return 0;
}
if(Ans-0.5>1e-9)
cout<<"YES";
else
cout<<"NO";
return 0;
}
里面的一部分实现了如果运行时间>150毫秒就会输出NO
有一个题有一个点WA了,那个点的时间时最慢的200+毫秒,但是为什么不管把检验时间的改成YES和NO都会WA