QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#305103 | #8011. Institute | ucup-team266# | WA | 4ms | 27060kb | C++14 | 2.0kb | 2024-01-14 18:10:26 | 2024-01-14 18:10:27 |
Judging History
answer
/*
Things to notice:
1. do not calculate useless values
2. do not use similar names
Things to check:
1. submit the correct file
2. time (it is log^2 or log)
3. memory
4. prove your naive thoughts
5. long long
6. corner case like n=0,1,inf or n=m
7. check if there is a mistake in the ds or other tools you use
8. fileio in some oi-contest
9. module on time
10. the number of a same divisor in a math problem
11. multi-information and queries for dp and ds problems
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define pii pair<long long,long long>
#define mp make_pair
#define pb push_back
const int mod=998244353;
const int inf=0x3f3f3f3f;
const int INF=1e18;
int n,m;
vector <int> g[300005];
int dfn[1000005],low[1000005],siz[1000005],times,scccnt,bl[1000005],vis[1000005],stk[1000005],top;
void tarjan(int u)
{
dfn[u]=low[u]=++times;
vis[u]=1,stk[++top]=u;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(vis[v]) low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
scccnt++;
while(1)
{
int x=stk[top];
top--;
bl[x]=scccnt,vis[x]=0,siz[scccnt]++;
if(x==u) break;
}
}
}
int U[300005],V[300005],T[300005],ok[300005],cyc[300005];
void dfs0(int u)
{
ok[u]=1;
for(int i=0;i<g[u].size();i++) if(!ok[g[u][i]]) dfs0(g[u][i]);
}
void solve()
{
cin>>n>>m;
for(int i=1;i<=m;i++) cin>>U[i]>>V[i]>>T[i];
for(int i=1;i<=m;i++) g[U[i]].pb(V[i]);
dfs0(1);
for(int i=1;i<=n;i++) g[i].clear();
for(int i=1;i<=m;i++) if(T[i]==2)
{
g[U[i]].pb(V[i]);
if(U[i]==V[i]) cyc[i]=1;
}
for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
for(int i=1;i<=n;i++) if(ok[i]&&siz[bl[i]]==1&&cyc[i]==0)
{
cout<<"Yes\n";
return;
}
cout<<"No\n";
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int _=1;
// cin>>_;
while(_--) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 26060kb
input:
3 4 1 2 1 2 3 2 3 2 1 3 1 2
output:
Yes
result:
ok answer is YES
Test #2:
score: 0
Accepted
time: 4ms
memory: 25996kb
input:
6 8 1 2 1 2 3 2 3 2 2 3 4 1 4 1 2 1 5 2 5 4 2 6 1 2
output:
No
result:
ok answer is NO
Test #3:
score: 0
Accepted
time: 0ms
memory: 26708kb
input:
1000 1000 141 466 1 634 659 1 179 96 2 445 344 2 993 974 1 310 114 2 32 333 1 758 832 1 834 1 1 874 825 2 480 61 2 765 100 2 804 616 1 496 545 1 786 261 2 899 263 1 962 237 2 766 807 1 561 583 1 35 425 1 201 291 1 6 142 1 61 386 2 785 861 2 386 986 2 288 769 2 850 209 1 660 259 2 258 143 2 646 715 2...
output:
Yes
result:
ok answer is YES
Test #4:
score: 0
Accepted
time: 0ms
memory: 26796kb
input:
1000 3000 719 279 2 857 23 1 984 625 2 904 509 2 892 456 2 589 195 2 718 932 2 608 363 1 474 672 1 217 993 2 165 895 2 727 329 2 932 404 2 952 146 2 201 272 2 412 895 2 228 267 2 396 365 2 813 794 2 259 250 1 968 764 2 100 76 2 924 665 2 981 931 2 292 975 2 903 649 2 793 101 2 54 703 1 853 58 2 356 ...
output:
Yes
result:
ok answer is YES
Test #5:
score: 0
Accepted
time: 3ms
memory: 26880kb
input:
1000 3000 686 470 2 132 418 2 775 962 2 814 8 2 450 767 2 580 243 2 742 534 2 508 304 2 396 513 2 731 385 2 499 309 2 144 150 2 111 209 2 340 189 1 219 755 2 511 655 2 428 941 2 165 707 2 253 619 2 140 766 2 999 132 2 415 101 2 887 192 2 598 262 2 312 675 1 97 527 2 407 179 2 11 154 1 107 996 2 586 ...
output:
No
result:
ok answer is NO
Test #6:
score: -100
Wrong Answer
time: 3ms
memory: 27060kb
input:
10000 10000 1496 8533 1 6761 8802 2 3147 8733 2 7074 899 1 4191 9520 2 2576 1464 1 8600 116 2 72 5894 1 1605 6769 1 344 2583 2 9951 8053 2 2663 1396 1 3172 7307 1 8490 8085 2 6623 7814 2 680 4471 2 4906 3810 1 5952 8860 1 9670 3644 2 7993 6329 2 4666 1119 2 3115 3676 2 4506 2979 2 1451 2540 2 5002 9...
output:
Yes
result:
wrong answer expected NO, found YES