思路:1:不想兜圈即不想有环!!!,那自然想到拓扑排序判断是否有环咯~
2:快速幂:因为k<=1e9啦~ON是会爆滴~
判断是否有环:
++cnt;
while()~
return cnt==n;
ACcode:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e3+10;
vector<int>v[N];
int n,m,k,ru[N],cnt;
bool topsort() {
queue<int>q;
for(int i=1; i<=n; i++) {
if(ru[i]==0)q.push(i);
}
//if(q.empty())return false;
while(!q.empty()) {
int t=q.front();
++cnt;
q.pop();
for(auto x:v[t]) {
ru[x]--;
if(ru[x]==0)q.push(x);
}
}
return cnt==n;
}
int q_pow(int a,int b,int p) {
a%=p;
int ans=1;
while(b) {
if(b&1)ans=ans*a%p;
a=(a*a)%p;
b>>=1;
}
return ans;
}
void solve() {
cin>>n>>m>>k;
for(int i=1; i<=m; i++) {
int x,y;
cin>>x>>y;
v[x].push_back(y);
ru[y]++;
}
if(topsort()) {
cout<<"Yes\n";
cout<<q_pow(2,k,9997)<<"\n";
} else {
cout<<"No\n";
cout<<k*k<<"\n";
}
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int tt=1;
//cin>>tt;
while(tt--) solve();
return 0;
}
//3
over~