记录编号 |
234971 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[SDOI 2012 DAY2]集合 |
最终得分 |
100 |
用户昵称 |
zys |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.690 s |
提交时间 |
2016-03-10 06:05:10 |
内存使用 |
16.31 MiB |
显示代码纯文本
#define MAXN 100010UL
#define MAXE 1000010UL
#define inf 0x2fffffff
#define BL(x) belong[x]
#define Min(a,b)((a)<(b)?(a):(b))
#include<cstdio>
#include<algorithm>
using namespace std;
char opt[10];int Ans;
int n,m,first[MAXN],tot,belong[MAXN],q;
struct Edge{
int u,v,w,next;
}edge[MAXE];
bool cmp(const Edge & a,const Edge & b)
{
return a.w<b.w;
}
inline void Add(int u,int v,int w)
{
edge[++tot].u=u;
edge[tot].v=v;
edge[tot].w=w;
edge[tot].next=first[u];
first[u]=tot;
}
inline void vio()
{
sort(edge+1,edge+tot+1,cmp);
for(int i=1,x;i<=q;i++){
scanf("%s",opt);
if(*opt=='M'){
scanf("%d",&x);
BL(x)=opt[4]-'A'+1;
}
else{
Ans=inf;
for(int j=1;j<=tot;j++)
if(BL(edge[j].u)==opt[3]-'A'+1)
if(BL(edge[j].v)==opt[4]-'A'+1){
Ans=edge[j].w;break;
}
if(Ans==inf)printf("No Found!\n");
else printf("%d\n",Ans);
}
}
}
int main()
{
freopen("seta.in","r",stdin);
freopen("seta.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1,u,v,w;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
Add(u,v,w);Add(v,u,w);
}
for(int i=1;i<=n;i++)BL(i)=1;
scanf("%d",&q);vio();
}