【总结】图论小总结【题解】P1330封锁阳关大学
【题解】【总结】P1330 封锁阳光大学 &&图论小总结
这道题其实有一点点难度,不过我能经过思考做出来说明还是没有普及组\(D1T1\)难度的。
考虑一条边的两边要有且仅有一个点被选中...这不就是染色吗?想到此,聪明的你一定就知道怎么做了。
这题唯一的坑点就是不一定图是联通的,所以要\(for\)一下所有点去\(bfs\)。
这种题我还\(wa\)了一次,而且如果不是我下了数据还调不出来...
思考一下为什么没有一遍过此题,还是因为思维不够完善。图论的题目,有什么坑点呢?在这里总结一下:
- 图不联通。有这个图的连通性意识就不会被坑。这里包括了森林的情况。
- 有自环的重边。这个是毒瘤出题人干的事情,不能被坑了。
- 存在负环,要判断一下。
- 树的根被指定了!
- 边数可能比你想像的要多。
- \(spfa\)已经死了QAQ!
- \(fr\)和\(to\)的位置调换了。凉心出题人!
解决图论的问题,可以通过什么办法呢?
- \(Tarjin\)求环求强连通分量。
- 最短路算法。(还有那种取对数的)
- 缩点+\(DAG\) \(DP\)
- 拓扑排序
- 并查集
- 最小生成树,实际上和拟阵联系起来。
- 树形\(dp\),实际上和上面那个很像的
- 树上倍增。\(lca\),\(st\)表啊之类的。
- 树上差分。我也不是很熟。
- 点分治。解决树上路径计数问题等。
- 树链剖分。同样也是树上路径,还可以顺便解决子树等问题。
- 树上莫队。神奇的算法。
- 正难则反!图论的题维护加边比较容易,维护减边就比较麻烦。反着来!
- 网络流。(主要是建模难 QAQ)
#include<bits/stdc++.h>
using namespace std;
#define RP(t,a,b) for(register int t=(a),edd=(b);t<=edd;++t)
#define DRP(t,a,b) for(register int t=(a),edd=(b);t>=edd;--t)
#define ERP(t,a) for(register int t=head[a];t;t=e[t].nx)
#define Max(a,b) ((a)<(b)?(b):(a))
#define Min(a,b) ((a)<(b)?(a):(b))
#define midd register int mid=(l+r)>>1
#define TMP template < class ccf >
TMP inline ccf qr(ccf b){
char c=getchar();
int q=1;
ccf x=0;
while(c<48||c>57)
q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)
x=x*10+c-48,c=getchar();
return q==-1?-x:x;
}
const int maxn=10005;
const int maxm=100005;
struct E{
int to,nx;
}e[maxm<<1];
int head[maxn];
int col[maxn];
int cnt;
int n,m;
inline void add(int fr,int to,bool f){
e[++cnt]=(E){to,head[fr]};
head[fr]=cnt;
if(f)
add(to,fr,0);
}
queue < int > q;
inline int bfs(int S){
q.push(S);
col[S]=-1;
int colcnt=0,tolcnt=0;
while(!q.empty()){
register int now=q.front();
colcnt+=(col[now]==1);
tolcnt++;
q.pop();
ERP(t,now)
if(col[e[t].to]!=0&&col[e[t].to]!=-col[now])
return -1;
else
if(col[e[t].to]==0)
q.push(e[t].to),col[e[t].to]=-col[now];
}
return Min(colcnt,tolcnt-colcnt);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
n=qr(1);
m=qr(1);
for(register int t=1,t1,t2;t<=m;++t){
t1=qr(1);
t2=qr(1);
add(t1,t2,1);
}
int ans=0,k;
RP(t,1,n)
if(col[t]==0)
if((k=bfs(t))==-1)
return puts("Impossible"),0;
else
ans+=k;
cout<<ans<<endl;
return 0;
}
【总结】图论小总结【题解】P1330封锁阳关大学的更多相关文章
- 洛谷P1330 封锁阳光大学(二分图染色)
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 洛谷——P1330 封锁阳光大学
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- P1330 封锁阳光大学(染色问题)
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- 二分图染色模板(P1330 封锁阳光大学)
二分图染色模板(P1330 封锁阳光大学) 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校 ...
- luogu P1330 封锁阳光大学 x
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- P1330 封锁阳光大学——深度优先搜索DFS
P1330 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由 \(n ...
- 洛谷 P1330 封锁阳光大学题解
题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图,N个点之间由M ...
- 洛谷P1330 封锁阳光大学 [图论,染色]
题目传送门 封锁阳光大学 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构 ...
- P1330 封锁阳光大学[搜索+染色]
题目来源:洛谷 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图 ...
随机推荐
- Guru's Guide to SQL Server Architecture and Internals
Guru's Guide to SQL Server Architecture and Internals
- many-to-one多对一属性说明
通过many-to-one元素,可以定义一种常见的与另一个持久化类的关联. 这种关系模型是多对一关联(实际上是一个对象引用-译注):这个表的一个外键引用目标表的 主键字段. <many-to-o ...
- php开发中sql语句拼接示例
1.插入语句 $sql="insert into Ad(AdClassID,AdType,AdTit,AdFileName,AdUrl,AShow,Addtime) values('&quo ...
- 选择一个 Python Web 框架:Django vs Flask vs Pyramid
Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...
- 最短路算法之 Dijkstra算法
Dijkstra算法 Dijkstra算法是典型最短路算法,用于计算一个节点到其它全部节点的最短路径. 主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最 ...
- AAuto无法关闭CMD窗口怎么办
如下图所示,当执行了io.print函数之后,打开的CMD窗口无法使用关闭按钮关闭,其实只要点击左上角的控制台,把钩去掉,该窗口即可关闭.
- AutoCAD如何批量设置线宽
1 如下图所示,全部选中图形,然后设置线宽 2 但是一般剖面线并不需要这么宽,我们打印预览可以发现完全黑的看不清了. 3 把线宽都设为0.2毫米效果不错
- mysql导出导入所有数据库
导出所有数据库 mysqldump -uroot -p123456 --all-databases > /home/aa.sql 导入所有数据库 mysql -uroot -p123456 &l ...
- 我的IT之路
在写这篇文章的时候内心是无比激动,因为这辈子是注定和IT打交道了. 都说大学时光是美好的,但却只有到了大四才知道时间是短暂的,也许和许多人一样,我的大学主要时光是在游戏中度过,1000多把的寒冰算是同 ...
- solr入门之pinyin4j源代码改写动态加入扩展词及整合进war项目中
1.初始化时载入用户定义的字典 package net.sourceforge.pinyin4j; import net.sourceforge.pinyin4j.multipinyin.Trie; ...