比赛 |
防止颓废的小练习v0.2 |
评测结果 |
AAAAAAAAAA |
题目名称 |
关押罪犯 |
最终得分 |
100 |
用户昵称 |
农场主 |
运行时间 |
0.156 s |
代码语言 |
C++ |
内存使用 |
0.62 MiB |
提交时间 |
2016-10-18 21:31:38 |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
#define maxn 20001
using namespace std;
class edge{
public:
int from,to,dis;
/*bool operator < (const edge e)const{
return dis>e.dis;
}*/
};
vector<edge> edges;
vector<int> G[maxn];
int d[maxn]={0},n,m;
//bool vis[maxn]={0};
void init(int n){
for(int i=0;i<=n;i++){
G[i].clear();
d[i]=-1;
// printf("%d",i);
}
// memset(vis,0,sizeof(vis));
}
void make_map(int x){
init(n);
for (int i=0;i<edges.size();i++){
edge e=edges[i];
if (e.dis<=x) continue;
G[e.from].push_back(e.to);
G[e.to].push_back(e.from);
// printf("%d %d\n",e.from,e.to);
}
}
bool dfs(int x,int t,int fa){
// printf("%d\n",x);
if (d[x]!=-1&&d[x]!=t) return 0;
if (d[x]==t) return 1;
d[x]=t;
for (int i=0;i<G[x].size();i++){
if (G[x][i]==fa) continue;
if (!dfs(G[x][i],t^1,x)) return 0;
}
return 1;
}
bool check(int x){
make_map(x);
for (int i=1;i<=n;i++){
if (d[i]==-1){
// printf("a");
if (!dfs(i,0,0)) return 0;
}
}
return 1;
}
int lower_bound(){
int l=0,r=1000000000,mid;
while(l<r){
mid=(l+r>>1);
if (check(mid)){
r=mid;
}
else l=mid+1;
}
return l;
}
void read(){
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
edges.push_back((edge){u,v,w});
}
// sort(edges.begin(),edges.end());
int ans=lower_bound();
printf("%d",ans);
}
int main(){
freopen("prison1.in","r",stdin);
freopen("prison1.out","w",stdout);
read();
}