Submission #1304911

#TimeUsernameProblemLanguageResultExecution timeMemory
1304911yusifmShell (info1cup18_shell)C++20
0 / 100
463 ms576 KiB
//#pragma GCC optimize("O3") #include <bits/stdc++.h> #define ll long long #define str string #define pb push_back #define pf push_front #define in insert #define all(v) v.begin(),v.end() const int sz=200001,INF=1000000000; using namespace std; ll n,m,l,num,num1,num2,Num=1,Res,ans=0; bool flag; vector<ll>Nums,pow2; vector<bool>isSeen(sz); vector<pair<ll,ll>>nums; vector<vector<ll>>res; set<ll>nodes; set<pair<ll,ll>>NUMS; void bfs(ll num) { queue<ll>numS; numS.push(num); isSeen[num]=true; while(numS.size()!=0) { Res=numS.front(); numS.pop(); for(int i=0;i<res[Res].size();i++) { if(!isSeen[res[Res][i]]) { numS.push(res[Res][i]); isSeen[res[Res][i]]=true; } } } } void solve() { cin>>n>>m>>l; for(int i=0;i<l;i++) { cin>>num; Nums.pb(num); } for(int i=0;i<m;i++) { cin>>num1>>num2; nums.pb({num1,num2}); } for(int i=1;i<pow2[m];i++) { flag=false,res.clear(),res.resize(n+1),fill(all(isSeen),false),NUMS.clear(),nodes.clear(); for(int j=0;j<m;j++) { if(i&pow2[j]) { if(NUMS.find({nums[j].first,nums[j].second})!=NUMS.end()) { flag=true; break; } res[nums[j].first].pb(nums[j].second),nodes.in(nums[j].first),nodes.in(nums[j].second),NUMS.in({nums[j].first,nums[j].second}); } } if(!flag && res[1].size()!=0) { bfs(1); for(int j=1;j<=n;j++) { if(res[j].size()>=2) { flag=true; break; } } for(auto node:nodes) { if(!isSeen[node]) { flag=true; break; } } for(int j=0;j<Nums.size();j++) { if(!isSeen[Nums[j]]) { flag=true; break; } } if(!flag && isSeen[n]) { ans++; } } } cout<<ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr),cout.tie(nullptr); while(Num<INF) { pow2.pb(Num),Num*=2; } ll t=1; //cin>>t; while(t--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...