洛谷1330 封锁阳光大学(DFS or BFS)
来源:互联网 发布:如何看待网络语言暴力 编辑:程序博客网 时间:2024/05/20 09:44
题目描述
曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街。河蟹看到欢快的曹,感到不爽。河蟹决定封锁阳光大学,不让曹刷街。
阳光大学的校园是一张由N个点构成的无向图,N个点之间由M条道路连接。每只河蟹可以对一个点进行封锁,当某个点被封锁后,与这个点相连的道路就被封锁了,曹就无法在与这些道路上刷街了。非常悲剧的一点是,河蟹是一种不和谐的生物,当两只河蟹封锁了相邻的两个点时,他们会发生冲突。
询问:最少需要多少只河蟹,可以封锁所有道路并且不发生冲突。
输入输出格式
输入格式:
第一行:两个整数N,M
接下来M行:每行两个整数A,B,表示点A到点B之间有道路相连。
输出格式:
仅一行:如果河蟹无法封锁所有道路,则输出“Impossible”,否则输出一个整数,表示最少需要多少只河蟹。
【输入样例1】3 31 21 32 3【输入样例2】3 21 22 3
【输出样例1】Impossible【输出样例2】1
染色问题,下面放上DFS和BFS的代码。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[200000]; 4 int n,m; 5 vector<int> v[100000]; 6 bool book[200000]; 7 int t[2]; 8 int ans=0; 9 10 bool DFS(int from,int judge)11 {12 t[judge]++;13 book[from]=1;14 a[from]=judge;15 for(int i=0;i<v[from].size();i++)16 {17 int k=v[from][i];18 if(book[k]&&a[from]==a[k])19 return 0;20 else if(!book[k])21 {22 bool flag=DFS(k,(judge+1)&1);23 if(!flag)24 return 0;25 }26 }27 28 return 1;29 }30 31 32 int main()33 {34 ios::sync_with_stdio(false);35 cin>>n>>m;36 int x,y;37 for(int i=1;i<=m;i++)38 {39 cin>>x>>y;40 v[x].push_back(y);41 v[y].push_back(x);42 }43 for(int i=1;i<=n;i++)44 {45 if(!book[i])46 {47 48 t[0]=t[1]=0;49 bool ok=DFS(i,0);50 if(!ok)51 {52 cout<<"Impossible\n";53 return 0;54 }55 ans+=min(t[0],t[1]);56 }57 58 }59 cout<<ans<<endl;60 return 0;61 }
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[200000]; 4 int n,m; 5 vector<int> v[100000]; 6 int book[200000]; 7 int ans=0; 8 int t1,t2; 9 queue<int> q;10 11 int BFS(int k)12 {13 14 int judge=1;15 book[k]=judge;16 q.push(k);17 t1=t2=0;18 while(!q.empty())19 {20 judge++;21 int k=q.size(); 22 for(int i=0;i<k;i++)23 {24 int x=q.front();q.pop();25 for(int j=0;j<v[x].size();j++)26 {27 if(!book[v[x][j]])28 {29 book[v[x][j]]=judge;30 q.push(v[x][j]);31 }32 else if(book[v[x][j]]==book[x])33 { return -1 ;}34 }35 }36 if(judge%2) t1+=k;37 else t2+=k;38 }39 return min(t1,t2);40 }41 42 int main()43 {44 ios::sync_with_stdio(false);45 cin>>n>>m;46 int x,y;47 for(int i=1;i<=m;i++)48 {49 cin>>x>>y;50 v[x].push_back(y);51 v[y].push_back(x);52 }53 for(int i=1;i<=n;i++)54 {55 if(!book[i])56 {57 int ok=BFS(i);58 if(ok==-1)59 {60 cout<<"Impossible\n";61 return 0;62 }63 ans+=ok;64 }65 }66 cout<<ans<<endl;67 return 0;68 }
阅读全文
0 0
- 洛谷1330 封锁阳光大学(DFS or BFS)
- 洛谷1330 封锁阳光大学 dfs染色
- Codevs 1535 封锁阳光大学 dfs || bfs
- 洛谷Oj-封锁阳光大学-BFS + 染色
- 洛谷 1330 封锁阳光大学
- 封锁阳光大学_洛谷1330_bfs
- 洛谷1330 封锁阳光大学 染色问题
- 洛谷 P 1330 封锁阳光大学
- 【洛谷1330】封锁阳光大学 染色问题
- 洛谷 P1330 封锁阳光大学(BFS染色)
- 洛谷P1330 封锁阳光大学(BFS, 并查集)
- dfs染色——洛谷 P1330 封锁阳光大学
- 洛谷 P1330 封锁阳光大学
- 洛谷 P1330 封锁阳光大学
- 洛谷 P1330 封锁阳光大学
- [洛谷P1330]封锁阳光大学
- 洛谷P1330 封锁阳光大学
- 洛谷 P1330 封锁阳光大学
- array_map
- 树状数组基本模版(区间更新,单点查询)
- 堆的模板题【洛谷P3378】
- S5PV210开发……实现1*5键检测
- 线段树的基础使用+(洛谷3373 )
- 洛谷1330 封锁阳光大学(DFS or BFS)
- 内嵌函数
- 输入输出的优化(getchar与putchar)
- SPFA基础模板 (洛谷1339 [USACO09OCT]热浪Heat Wave)
- 链式前向星的最最基础的模板
- tarjan缩点以及链式前向星的最最基本的应用(洛谷2835 刻录光盘)
- CSS----选择器
- tarjan缩点以及链式前向星的基本+应用(洛谷1262 间谍网络)
- 欧几里得算法以及扩展欧几里得算法(过河noip2005提高组第二题)