UOJ #134(【UR #9】App 管理器-tarjen+构造)
2015-10-05 21:40
405 查看
给一张混合图的无向边定向,使得原图强连通,题目保证有解。
显然,如果只有无向边,那么原图必边强连通,故用tarjen走一遍就行。
现在考虑有有向边的情况,
对于一条无向边,把它从图中删除,因为原图强连通,故
- 存在一条路径从u到v
- 存在一条路径从v到u
必然满足一条。
若只满足一条,就把边的另一个方向填上。
否则这条边删除不影响答案。
显然,如果只有无向边,那么原图必边强连通,故用tarjen走一遍就行。
现在考虑有有向边的情况,
对于一条无向边,把它从图中删除,因为原图强连通,故
- 存在一条路径从u到v
- 存在一条路径从v到u
必然满足一条。
若只满足一条,就把边的另一个方向填上。
否则这条边删除不影响答案。
#include<bits/stdc++.h> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Forp(x) for(int p=Pre[x];p;p=Next[p]) #define MEM(a) memset(a,0,sizeof(a)); #define MAXN (5000+10) #define MAXM (2*MAXN) typedef long long ll; int n,m; int Pre[MAXN]={0},Next[MAXM],edge[MAXM],siz=1; void addedge(int u,int v) { edge[++siz]=v; Next[siz]=Pre[u]; Pre[u]=siz; } void addedge2(int u,int v) {addedge(u,v),addedge(v,u);} bool b[MAXN]; int f[MAXN][MAXN]; void dfs(int x) { b[x]=1; Forp(x){ int v=edge[p]; if (!b[v] && f[x][v] ) dfs(v); } } int u[MAXN],v[MAXN],t[MAXN]; int main() { freopen("uoj134.in","r",stdin); // freopen(".out","w",stdout); MEM(f) MEM(b) cin>>n>>m; For(i,m) { scanf("%d%d%d",&u[i],&v[i],&t[i]); addedge(u[i],v[i]); f[u[i]][v[i]]++; if (!t[i]) addedge(v[i],u[i]),f[v[i]][u[i]]++; } For(i,m) { if (t[i]) t[i]=0; else { For(j,n) b[j]=0; f[u[i]][v[i]]--; dfs(u[i]); if (b[v[i]]) { t[i]= 1; }else { f[u[i]][v[i]]++; f[v[i]][u[i]]--; } } printf("%d\n",t[i]); } return 0; }
相关文章推荐
- Makefile文件简单示例一:测试验证小程序的管理
- Android基础学习之Menu(菜单)
- Android 动画的案例
- iOS中界面传值的方法总结
- android ImageView 实现圆形图片(QQ头像)
- ios-打电话
- Android Notivation的使用
- iOS软件开发 Core Data的使用
- Android Notivation的使用
- Objective-C NSFileManager 管理文件和目录
- Android 获取服务器数据解析Text数据,存在htmel标签的处理办法
- 通过JavaScript钩子来获取UIWebView视频播放的状态
- java的数据类型,几个java小程序
- Android 弹出通知Toast的使用
- Android 弹出通知Toast的使用
- Android studio 更新只显示"Download”的解决办法
- The following classes could not be instantiated: - android.support.v7.internal.widget.ActionBarOverl
- Android4.0以上调用设置方法
- Android:Material Design(三) 动画
- UIWebView直接全屏播放视频链接